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

Reply via email to