[clang] [C++] Fix a crash with __thread and dependent types (PR #140542)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Mon May 19 06:53:09 PDT 2025


================
@@ -14622,7 +14622,8 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {
       Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);
       if (getLangOpts().CPlusPlus11)
         Diag(var->getLocation(), diag::note_use_thread_local);
-    } else if (getLangOpts().CPlusPlus && var->hasInit()) {
+    } else if (getLangOpts().CPlusPlus && var->hasInit() &&
+               !var->getType()->isDependentType()) {
----------------
erichkeane wrote:

We should be doing this check in `checkConstInit`, AND we shouldn't be doing it on the type of the variable, we should be doing it on the dependency of the init-expr.

This patch doesn't fix:

```
template<typename T>
void foo() {
 static __thread int *my_thing = T{};
```

So I think line 14611 should be:

`if (var->getInit()->isInstantiationDependent()) return true;`, at least for here.  THOUGH looking at later uses of `checkConstInit`, I'm not sure what the fallotu of that would be below.


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


More information about the cfe-commits mailing list