summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-03-23 23:09:08 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-03-23 23:09:08 +0000
commitb66d77793f2582901e6dde2015a6f3a8fac167b7 (patch)
treed1fb7cb0eed55e3afa7727426cc428fb8c60417a /clang/test
parent6976ec85510ffa9e35b7cf03a79d1c394a1b3080 (diff)
downloadbcm5719-llvm-b66d77793f2582901e6dde2015a6f3a8fac167b7.tar.gz
bcm5719-llvm-b66d77793f2582901e6dde2015a6f3a8fac167b7.zip
When defining a forward-declared enum, don't try to attach the definition to
a previous declaration if the redeclaration is invalid. That way lies madness. Fixes a crash-on-invalid reported by Abramo. llvm-svn: 153349
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/enum-scoped.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/enum-scoped.cpp b/clang/test/SemaCXX/enum-scoped.cpp
index 31190bebaa3..44394296e37 100644
--- a/clang/test/SemaCXX/enum-scoped.cpp
+++ b/clang/test/SemaCXX/enum-scoped.cpp
@@ -189,3 +189,14 @@ namespace test7 {
enum class E { e = (struct S*)0 == (struct S*)0 };
S *p;
}
+
+namespace test8 {
+ template<typename T> struct S {
+ enum A : int; // expected-note {{here}}
+ enum class B; // expected-note {{here}}
+ enum class C : int; // expected-note {{here}}
+ };
+ template<typename T> enum S<T>::A { a }; // expected-error {{previously declared with fixed underlying type}}
+ template<typename T> enum class S<T>::B : char { b }; // expected-error {{redeclared with different underlying}}
+ template<typename T> enum S<T>::C : int { c }; // expected-error {{previously declared as scoped}}
+}
OpenPOWER on IntegriCloud