Skip to content

Commit b94ea8b

Browse files
committed
[pseudo] Add bracket recovery for function parameters.
1 parent 4983fdf commit b94ea8b

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

clang-tools-extra/pseudo/lib/cxx/cxx.bnf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ noptr-declarator := declarator-id
412412
noptr-declarator := noptr-declarator parameters-and-qualifiers
413413
noptr-declarator := noptr-declarator [ constant-expression_opt ]
414414
noptr-declarator := ( ptr-declarator )
415-
parameters-and-qualifiers := ( parameter-declaration-clause_opt ) cv-qualifier-seq_opt ref-qualifier_opt noexcept-specifier_opt
415+
parameters-and-qualifiers := ( parameter-declaration-clause_opt [recover=Brackets] ) cv-qualifier-seq_opt ref-qualifier_opt noexcept-specifier_opt
416416
trailing-return-type := -> type-id
417417
ptr-operator := * cv-qualifier-seq_opt
418418
ptr-operator := &

clang-tools-extra/pseudo/test/cxx/parameter-decl-clause.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ void foo2(int, ...);
44
// CHECK-NEXT: ├─decl-specifier-seq~VOID :=
55
// CHECK-NEXT: ├─init-declarator-list~noptr-declarator := noptr-declarator parameters-and-qualifiers
66
// CHECK-NEXT: │ ├─noptr-declarator~IDENTIFIER :=
7-
// CHECK-NEXT: │ └─parameters-and-qualifiers := ( parameter-declaration-clause )
7+
// CHECK-NEXT: │ └─parameters-and-qualifiers := ( parameter-declaration-clause [recover=Brackets] )
88
// CHECK-NEXT: │ ├─( :=
99
// CHECK-NEXT: │ ├─parameter-declaration-clause := parameter-declaration-list , ...
1010
// CHECK-NEXT: │ │ ├─parameter-declaration-list~INT :=
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: clang-pseudo -grammar=cxx -source=%s --print-forest | FileCheck %s
2+
void foo(complete garbage???) {}
3+
// CHECK: translation-unit~function-definition := decl-specifier-seq declarator function-body
4+
// CHECK-NEXT: ├─decl-specifier-seq~VOID := tok[0]
5+
// CHECK-NEXT: ├─declarator~noptr-declarator := noptr-declarator parameters-and-qualifiers
6+
// CHECK-NEXT: │ ├─noptr-declarator~IDENTIFIER := tok[1]
7+
// CHECK-NEXT: │ └─parameters-and-qualifiers := ( parameter-declaration-clause [recover=Brackets] )
8+
// CHECK-NEXT: │ ├─( := tok[2]
9+
// CHECK-NEXT: │ ├─parameter-declaration-clause := <opaque>
10+
// CHECK-NEXT: │ └─) := tok[8]
11+
// CHECK-NEXT: └─function-body~compound-statement := { }
12+
// CHECK-NEXT: ├─{ := tok[9]
13+
// CHECK-NEXT: └─} := tok[10]

0 commit comments

Comments
 (0)