https://github.com/ojhunt created 
https://github.com/llvm/llvm-project/pull/196755

This reverts commit e2def106757534b07a2d3ff15ddd48e14b69a66d.

>From 97ba148d0efc7d9f6c8ebbd3be827320726b8c07 Mon Sep 17 00:00:00 2001
From: Oliver Hunt <[email protected]>
Date: Sat, 9 May 2026 14:07:39 -0700
Subject: [PATCH] Revert "Avoid assert in substqualifier (#182707)"

This reverts commit e2def106757534b07a2d3ff15ddd48e14b69a66d.
---
 clang/docs/ReleaseNotes.rst          |  1 -
 clang/lib/Sema/SemaDecl.cpp          |  4 +---
 clang/test/SemaTemplate/GH176152.cpp | 12 ------------
 3 files changed, 1 insertion(+), 16 deletions(-)
 delete mode 100644 clang/test/SemaTemplate/GH176152.cpp

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 0d43f864653cc..c17143e3c0398 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -572,7 +572,6 @@ Bug Fixes to C++ Support
 - Correctly diagnose uses of ``co_await`` / ``co_yield`` in the default 
argument of nested function declarations. (#GH98923)
 - Fixed a crash when diagnosing an invalid static member function with an 
explicit object parameter (#GH177741)
 - Clang incorrectly instantiated variable specializations outside of the 
immediate context. (#GH54439)
-- Fixed a crash when instantiating an invalid out-of-line static data member 
definition in a local class. (#GH176152)
 - Fixed a crash when pack expansions are used as arguments for non-pack 
parameters of built-in templates. (#GH180307)
 - Fix a problem where pack index expressions where incorrectly being regarded 
as equivalent.
 - Fixed a bug where captured variables in non-mutable lambdas were incorrectly 
treated as mutable
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 7c5bcd56b346c..a9a4cb89d115f 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -7926,7 +7926,7 @@ NamedDecl *Sema::ActOnVariableDeclarator(
 
     if (CurContext->isRecord()) {
       if (SC == SC_Static) {
-        if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
+        if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
           // Walk up the enclosing DeclContexts to check for any that are
           // incompatible with static data members.
           const DeclContext *FunctionOrMethod = nullptr;
@@ -7948,8 +7948,6 @@ NamedDecl *Sema::ActOnVariableDeclarator(
             Diag(D.getIdentifierLoc(),
                  diag::err_static_data_member_not_allowed_in_local_class)
                 << Name << RD->getDeclName() << RD->getTagKind();
-            Invalid = true;
-            RD->setInvalidDecl();
           } else if (AnonStruct) {
             // C++ [class.static.data]p4: Unnamed classes and classes contained
             // directly or indirectly within unnamed classes shall not contain
diff --git a/clang/test/SemaTemplate/GH176152.cpp 
b/clang/test/SemaTemplate/GH176152.cpp
deleted file mode 100644
index 7d61aa292982d..0000000000000
--- a/clang/test/SemaTemplate/GH176152.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify %s
-
-template <class T> int f(T) {
-  struct MyClass {
-    static int staticField;
-    // expected-error@-1 {{static data member 'staticField' not allowed in 
local struct 'MyClass'}}
-  };
-  int MyClass::staticField = 42;
-  return 0;
-}
-
-int x = f(0);

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to