13e34cfe8SAkira Hatanaka // RUN: %clang_cc1 -fsyntax-only -verify %s 23e34cfe8SAkira Hatanaka // expected-no-diagnostics 33e34cfe8SAkira Hatanaka 43e34cfe8SAkira Hatanaka extern int array[1]; 53e34cfe8SAkira Hatanaka 63e34cfe8SAkira Hatanaka template <typename> 73e34cfe8SAkira Hatanaka class C { 83e34cfe8SAkira Hatanaka enum { D }; 93e34cfe8SAkira Hatanaka public: foo1()103e34cfe8SAkira Hatanaka template <typename A> void foo1() { 113e34cfe8SAkira Hatanaka extern int array[((int)C<A>::k > (int)D) ? 1 : -1]; 123e34cfe8SAkira Hatanaka } 133e34cfe8SAkira Hatanaka }; 143e34cfe8SAkira Hatanaka 153e34cfe8SAkira Hatanaka template<> 163e34cfe8SAkira Hatanaka class C<int> { 173e34cfe8SAkira Hatanaka public: 183e34cfe8SAkira Hatanaka const static int k = 2; 193e34cfe8SAkira Hatanaka }; 203e34cfe8SAkira Hatanaka foo2()213e34cfe8SAkira Hatanakavoid foo2() { 223e34cfe8SAkira Hatanaka C<char> c; 233e34cfe8SAkira Hatanaka c.foo1<int>(); 243e34cfe8SAkira Hatanaka } 253e34cfe8SAkira Hatanaka 263e34cfe8SAkira Hatanaka template<int n> foo3()273e34cfe8SAkira Hatanakavoid foo3() { 283e34cfe8SAkira Hatanaka extern int array[n ? 1 : -1]; 293e34cfe8SAkira Hatanaka } 303e34cfe8SAkira Hatanaka foo4()313e34cfe8SAkira Hatanakavoid foo4() { 323e34cfe8SAkira Hatanaka foo3<5>(); 333e34cfe8SAkira Hatanaka } 34*1b8125b0SRichard Smith 35*1b8125b0SRichard Smith namespace NS { f()36*1b8125b0SRichard Smith int f() { extern int arr[3]; { extern int arr[]; } return 0; } g()37*1b8125b0SRichard Smith template<typename T> void g() { extern int arr[3]; extern T arr; } 38*1b8125b0SRichard Smith template void g<int[]>(); 39*1b8125b0SRichard Smith } 40