]> granicus.if.org Git - clang/commitdiff
[ItaniumMangle] Mangle dependent __underlying_type correctly
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 8 Jun 2016 00:34:15 +0000 (00:34 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 8 Jun 2016 00:34:15 +0000 (00:34 +0000)
We attempted to use the UnaryTransformType's UnderlyingType instead of
it's BaseType.  This is not correct for dependent UnaryTransformType
because the have no underlying type.

This fixes PR28045.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272079 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ItaniumMangle.cpp
test/CodeGenCXX/mangle.cpp

index 1d40d42c11d28b870c7e669936c4bb330a14395b..bb4039e7f3ab1f7c87985d1d5129ae5a17fd34de 100644 (file)
@@ -2736,7 +2736,7 @@ void CXXNameMangler::mangleType(const UnaryTransformType *T) {
     }
   }
 
-  mangleType(T->getUnderlyingType());
+  mangleType(T->getBaseType());
 }
 
 void CXXNameMangler::mangleType(const AutoType *T) {
index 5012c3b37981e676fe102af5775ab5a357d95f74..5d757102ed25f5861f2ece6178dac763bc2f8590 100644 (file)
@@ -1101,3 +1101,13 @@ struct c {
   // CHECK-LABEL: @_ZN6test541cC2EPNS0_Ut0_E
 };
 }
+
+namespace test55 {
+enum E { R };
+
+template <typename T>
+void fn(T, __underlying_type(T)) {}
+
+template void fn<E>(E, __underlying_type(E));
+// CHECK-LABEL: @_ZN6test552fnINS_1EEEEvT_U3eutS2_
+}