[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