================
@@ -14919,7 +14919,7 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl
*var) {
// Apply section attributes and pragmas to global variables.
if (GlobalStorage && var->isThisDeclarationADefinition() &&
- !inTemplateInstantiation()) {
+ !var->getDeclContext()->isDependentContext()) {
----------------
erichkeane wrote:
Checking JUST the actual var decl is actually going to be a 'smaller' thing,
but I'm not sure it is actually going to work? @ahatanak : please try it
though, it is quite a bit easier.
The difference here is that if we switch to ONLY a dependent type (instead of a
dependent decl), we end up in a situation where we might try to do this for a
non-dependently typed variable in a dependent context. So I don't think
that'll fix it?
Consider the example:
```
template <class T>
struct A {
struct B;
static constexpr B b{nullptr}; // This used to crash.
};
```
IN this case, `B` is a dependent type, since it is inside the struct (so it is
`A<T>::B`. However consider this slight modification (please add this test!).
```
struct B;
template <class T>
struct A {
static constexpr B b{nullptr}; // This used to crash.
};
```
Note I moved `B` out of the template. Now `b` is still going to go down this
path (I think?) but is no longer a dependent type, despite being a dependent
context. I think this is wrong?
https://github.com/llvm/llvm-project/pull/161590
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits