erichkeane f65b35d89f [OpenACC] Stop trying to analyze invalid Var-Decls.
The code to analyze VarDecls for the purpose of ensuring a magic-static
isn't present in a 'routine' was getting confused/crashed because we
create something that looks like a magic-static during error-recovery,
but it is still an invalid decl.

This patch causes us to just 'give up' in the case where the vardecl is
already invalid.

Fixes: #140920
2025-05-21 10:31:21 -07:00

20 lines
950 B
C++

// RUN: %clang_cc1 %s -fopenacc -verify
// Ensure that we are properly handling 'vardecl' when they are created during
// error recovery. The errors themselves aren't really relevant/necessary to the
// bug fix.
struct Thing{ };
struct pair {
// expected-error@+2{{no member named 'T1'}}
// expected-error@+1{{expected a qualified name after 'typename'}}
template <typename enable_if<Thing::template T1<int>() &&
!Thing::template T1<int>(),
// expected-error@+4{{non-friend class member 'type' cannot have a qualified name}}
// expected-error@+3{{type specifier is required}}
// expected-error@+2{{non-static data member 'type' cannot be declared as a template}}
// expected-error@+1{{no member named 'type' in the global namespace}}
bool>::type = false>
// expected-error@+1{{expected '(' for function-style cast or type construction}}
void func(void);
};