https://github.com/jcsxky updated https://github.com/llvm/llvm-project/pull/77312
>From 1579c73d40a285caad1c51a74a1324d6476d633c Mon Sep 17 00:00:00 2001 From: huqizhi <huqi...@feysh.com> Date: Mon, 8 Jan 2024 22:15:09 +0800 Subject: [PATCH] [clang] pop explicit to keep context stack balance --- clang/lib/Parse/ParseDecl.cpp | 1 + .../cxx-static-member-init-no-crash.cpp | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 clang/test/Parser/cxx-static-member-init-no-crash.cpp diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index b60ae293ef8c20..6b16320f86721b 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -2669,6 +2669,7 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes( /*Braced=*/false); CalledSignatureHelp = true; } + InitScope.pop(); Actions.ActOnInitializerError(ThisDecl); SkipUntil(tok::r_paren, StopAtSemi); } else { diff --git a/clang/test/Parser/cxx-static-member-init-no-crash.cpp b/clang/test/Parser/cxx-static-member-init-no-crash.cpp new file mode 100644 index 00000000000000..a1956500c55c2d --- /dev/null +++ b/clang/test/Parser/cxx-static-member-init-no-crash.cpp @@ -0,0 +1,20 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s + +template <typename T, typename Base> class EngineClassTypeInfo; // expected-note {{template is declared here}} +template <typename T> struct _ConcreteClassBase {}; + +struct _GLOBALSCOPE {}; +template <typename T = _GLOBALSCOPE> struct _SCOPE {}; + +class Zone { +private: + typedef _ConcreteClassBase<Zone> _ClassBase; + static EngineClassTypeInfo<Zone, _ClassBase> _smTypeInfo; + static EngineExportScope &__engineExportScope(); // expected-error {{unknown type name 'EngineExportScope'}} +}; + +EngineClassTypeInfo<Zone, Zone::_ClassBase> + Zone::_smTypeInfo("Zone", &_SCOPE<__DeclScope>()(), 0); /* expected-error {{use of undeclared identifier '__DeclScope'}} \ + expected-error {{implicit instantiation of undefined template 'EngineClassTypeInfo<Zone, _ConcreteClassBase<Zone>>'}} */ +EngineExportScope &Zone::__engineExportScope() { return Zone::_smTypeInfo; } // expected-error {{unknown type name 'EngineExportScope'}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits