mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 18:46:40 +00:00

redeclaration chain for an array. A prior attempt to fix this in r280330 didn't handle the case where the old variable is dependent and the new one is not. It is notable and worrying that the test case in this example forms a redeclaration chain for a non-dependent variable that includes a declaration with a dependent type. We should probably fix that too.
40 lines
633 B
C++
40 lines
633 B
C++
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
// expected-no-diagnostics
|
|
|
|
extern int array[1];
|
|
|
|
template <typename>
|
|
class C {
|
|
enum { D };
|
|
public:
|
|
template <typename A> void foo1() {
|
|
extern int array[((int)C<A>::k > (int)D) ? 1 : -1];
|
|
}
|
|
};
|
|
|
|
template<>
|
|
class C<int> {
|
|
public:
|
|
const static int k = 2;
|
|
};
|
|
|
|
void foo2() {
|
|
C<char> c;
|
|
c.foo1<int>();
|
|
}
|
|
|
|
template<int n>
|
|
void foo3() {
|
|
extern int array[n ? 1 : -1];
|
|
}
|
|
|
|
void foo4() {
|
|
foo3<5>();
|
|
}
|
|
|
|
namespace NS {
|
|
int f() { extern int arr[3]; { extern int arr[]; } return 0; }
|
|
template<typename T> void g() { extern int arr[3]; extern T arr; }
|
|
template void g<int[]>();
|
|
}
|