summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-01-20 18:50:12 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-01-20 18:50:12 +0000
commit91fb1f4be78425f6a15a364ff9552ddc7edc1627 (patch)
treeb0016553194b45a8c39fccce8c0c94992e857661
parent4fe77b9329e74d864f12dd2ce11e66ecaf410fea (diff)
downloadbcm5719-llvm-91fb1f4be78425f6a15a364ff9552ddc7edc1627.tar.gz
bcm5719-llvm-91fb1f4be78425f6a15a364ff9552ddc7edc1627.zip
Fix actually-reachable llvm_unreachable.
llvm-svn: 292632
-rw-r--r--clang/lib/AST/ItaniumMangle.cpp3
-rw-r--r--clang/test/CodeGenCXX/mangle.cpp11
2 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index ab3e49d903c..41c057719b6 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -3043,6 +3043,7 @@ void CXXNameMangler::mangleType(const DependentNameType *T) {
// ::= Te <name> # dependent elaborated type specifier using
// # 'enum'
switch (T->getKeyword()) {
+ case ETK_None:
case ETK_Typename:
break;
case ETK_Struct:
@@ -3056,8 +3057,6 @@ void CXXNameMangler::mangleType(const DependentNameType *T) {
case ETK_Enum:
Out << "Te";
break;
- default:
- llvm_unreachable("unexpected keyword for dependent type name");
}
// Typename types are always nested
Out << 'N';
diff --git a/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp
index 3a94071294d..229a0799d1b 100644
--- a/clang/test/CodeGenCXX/mangle.cpp
+++ b/clang/test/CodeGenCXX/mangle.cpp
@@ -1125,3 +1125,14 @@ namespace test57 {
// CHECK-LABEL: @_ZN6test571fILi0EEEvDTplcldtL_ZNS_1xEE1fIXLi0EEEET_E
template void f<0>(int);
}
+
+namespace test58 {
+ struct State {
+ bool m_fn1();
+ } a;
+ template <class T> struct identity_ { typedef T type; };
+ struct A {
+ template <typename T> A(T, bool (identity_<T>::type::*)());
+ };
+ void fn1() { A(a, &State::m_fn1); }
+}
OpenPOWER on IntegriCloud