xref: /aosp_15_r20/external/clang/test/SemaTemplate/instantiate-declref-ice.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // expected-no-diagnostics
3*67e74705SXin Li template<int i> struct x {
4*67e74705SXin Li   static const int j = i;
5*67e74705SXin Li   x<j>* y;
6*67e74705SXin Li };
7*67e74705SXin Li 
8*67e74705SXin Li template<int i>
9*67e74705SXin Li const int x<i>::j;
10*67e74705SXin Li 
11*67e74705SXin Li int array0[x<2>::j];
12*67e74705SXin Li 
13*67e74705SXin Li template<typename T>
14*67e74705SXin Li struct X0 {
15*67e74705SXin Li   static const unsigned value = sizeof(T);
16*67e74705SXin Li };
17*67e74705SXin Li 
18*67e74705SXin Li template<typename T>
19*67e74705SXin Li const unsigned X0<T>::value;
20*67e74705SXin Li 
21*67e74705SXin Li int array1[X0<int>::value == sizeof(int)? 1 : -1];
22*67e74705SXin Li 
testX0()23*67e74705SXin Li const unsigned& testX0() { return X0<int>::value; }
24*67e74705SXin Li 
25*67e74705SXin Li int array2[X0<int>::value == sizeof(int)? 1 : -1];
26*67e74705SXin Li 
27*67e74705SXin Li template<typename T>
28*67e74705SXin Li struct X1 {
29*67e74705SXin Li   static const unsigned value;
30*67e74705SXin Li };
31*67e74705SXin Li 
32*67e74705SXin Li template<typename T>
33*67e74705SXin Li const unsigned X1<T>::value = sizeof(T);
34*67e74705SXin Li 
35*67e74705SXin Li int array3[X1<int>::value == sizeof(int)? 1 : -1];
36