[clang] [Clang] Fixed a crash when instantiating an invalid out-of-line static data member definition in a local class (PR #196772)

via cfe-commits cfe-commits at lists.llvm.org
Sun May 10 02:02:55 PDT 2026


================
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+template <class T> int f(T) {
+  struct A {
+    static int B; // expected-error {{static data member 'B' not allowed in local struct 'A'}}
+  };
+  int A::B; // expected-note {{previous definition is here}}
+  int A::B = 1; // expected-error {{redefinition of 'B'}}
+  return 0;
+}
+
+int x = f(0);
----------------
TPPPP72 wrote:

In fact, this is not just a feeling, but a proven fact.
```cpp
if (D->getIdentifier()) {
  llvm::errs() << "Checking VarDecl: " << D->getNameAsString() << "\n";
  llvm::errs() << "  D->isInvalidDecl(): " << D->isInvalidDecl() << "\n";
  llvm::errs() << "  Var->isInvalidDecl(): " << Var->isInvalidDecl() << "\n";
  llvm::errs() << "  Var Context Kind: " << Var->getDeclContext()->getDeclKindName() << "\n";
  if (auto *FD = dyn_cast<FunctionDecl>(Var->getDeclContext())) {
      llvm::errs() << "  Var Context Name: " << FD->getNameAsString() << "\n";
  }
}
```

```

https://github.com/llvm/llvm-project/pull/196772


More information about the cfe-commits mailing list