diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-01-20 18:50:12 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-01-20 18:50:12 +0000 |
commit | 91fb1f4be78425f6a15a364ff9552ddc7edc1627 (patch) | |
tree | b0016553194b45a8c39fccce8c0c94992e857661 | |
parent | 4fe77b9329e74d864f12dd2ce11e66ecaf410fea (diff) | |
download | bcm5719-llvm-91fb1f4be78425f6a15a364ff9552ddc7edc1627.tar.gz bcm5719-llvm-91fb1f4be78425f6a15a364ff9552ddc7edc1627.zip |
Fix actually-reachable llvm_unreachable.
llvm-svn: 292632
-rw-r--r-- | clang/lib/AST/ItaniumMangle.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/mangle.cpp | 11 |
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); } +} |