summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-12-26 22:42:47 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-12-26 22:42:47 +0000
commitcde2c8f7d27f376279f36bd38097551ec717bed2 (patch)
tree0187d63ca8b9c6df1ab9fa442a3ce28f654980d6 /clang/test
parent8d302df4a43e95c89de272adff79c71c61249990 (diff)
downloadbcm5719-llvm-cde2c8f7d27f376279f36bd38097551ec717bed2.tar.gz
bcm5719-llvm-cde2c8f7d27f376279f36bd38097551ec717bed2.zip
Delay checking of typedefs of dependent types. Fixes PR11630.
llvm-svn: 147281
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/typedef-redecl.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/typedef-redecl.cpp b/clang/test/SemaCXX/typedef-redecl.cpp
index 31de9c00c10..b53bcd2b458 100644
--- a/clang/test/SemaCXX/typedef-redecl.cpp
+++ b/clang/test/SemaCXX/typedef-redecl.cpp
@@ -59,3 +59,37 @@ template<typename T>
typedef T f(T t) { return t; } // expected-error {{function definition declared 'typedef'}}
int k = f(0);
int k2 = k;
+
+namespace PR11630 {
+ template <class T>
+ struct S
+ {
+ static const unsigned C = 1;
+ static void f()
+ {
+ typedef int q[C == 1 ? 1 : -1]; // expected-note{{previous definition is here}}
+ typedef int q[C >= 1 ? 2 : -2]; // expected-error{{typedef redefinition with different types ('int [2]' vs 'int [1]')}}
+ typedef int n[C == 1 ? 1 : -1];
+ typedef int n[C >= 1 ? 1 : -1];
+ }
+ };
+
+ template <int T>
+ struct S2
+ {
+ static void f()
+ {
+ typedef int q[1]; // expected-note{{previous definition is here}}
+ typedef int q[T]; // expected-error{{typedef redefinition with different types ('int [2]' vs 'int [1]')}}
+ }
+ };
+
+ void f() {
+ S<int> a;
+ a.f(); // expected-note{{in instantiation of member function 'PR11630::S<int>::f' requested here}}
+ S2<1> b;
+ b.f();
+ S2<2> b2;
+ b2.f(); // expected-note{{in instantiation of member function 'PR11630::S2<2>::f' requested here}}
+ }
+}
OpenPOWER on IntegriCloud