diff --git a/clang-tools-extra/pseudo/lib/cxx.bnf b/clang-tools-extra/pseudo/lib/cxx.bnf --- a/clang-tools-extra/pseudo/lib/cxx.bnf +++ b/clang-tools-extra/pseudo/lib/cxx.bnf @@ -537,7 +537,7 @@ class-key := STRUCT class-key := UNION member-specification := member-declaration member-specification_opt -member-specification := access-specifier : member-declaration member-specification_opt +member-specification := access-specifier : member-specification_opt member-declaration := decl-specifier-seq_opt member-declarator-list_opt ; member-declaration := function-definition member-declaration := using-declaration diff --git a/clang-tools-extra/pseudo/test/cxx/empty-member-spec.cpp b/clang-tools-extra/pseudo/test/cxx/empty-member-spec.cpp new file mode 100644 --- /dev/null +++ b/clang-tools-extra/pseudo/test/cxx/empty-member-spec.cpp @@ -0,0 +1,13 @@ +// RUN: clang-pseudo -grammar=%cxx-bnf-file -source=%s --print-forest | FileCheck %s +class Foo { +public: +}; +// CHECK: decl-specifier-seq~class-specifier := class-head { member-specification } +// CHECK-NEXT: ├─class-head := class-key class-head-name +// CHECK-NEXT: │ ├─class-key~CLASS := tok[0] +// CHECK-NEXT: │ └─class-head-name~IDENTIFIER := tok[1] +// CHECK-NEXT: ├─{ := tok[2] +// CHECK-NEXT: ├─member-specification := access-specifier : +// CHECK-NEXT: │ ├─access-specifier~PUBLIC := tok[3] +// CHECK-NEXT: │ └─: := tok[4] +// CHECK-NEXT: └─} := tok[5]