]> granicus.if.org Git - clang/commitdiff
Do not assume the template argument is an integer only because the
authorRichard Trieu <rtrieu@google.com>
Wed, 3 Apr 2013 02:31:17 +0000 (02:31 +0000)
committerRichard Trieu <rtrieu@google.com>
Wed, 3 Apr 2013 02:31:17 +0000 (02:31 +0000)
expressions are integer.  It can also be ValueDecl expressions

Use the type information from the TemplateParameterList instead

Patch by Olivier Goffart!

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

lib/AST/ASTDiagnostic.cpp
test/Misc/diag-template-diffing.cpp

index c2c24925ebcb027e2957434d6ee91ab48483b471..cc1ecea9afe5ff8fd75a072b711b1d667fdee965 100644 (file)
@@ -911,8 +911,7 @@ class TemplateDiff {
           Tree.SetNode(FromExpr, ToExpr);
           Tree.SetDefault(FromIter.isEnd() && FromExpr,
                           ToIter.isEnd() && ToExpr);
-          if ((FromExpr && FromExpr->getType()->isIntegerType()) ||
-              (ToExpr && ToExpr->getType()->isIntegerType())) {
+          if (DefaultNTTPD->getType()->isIntegralOrEnumerationType()) {
             if (FromExpr)
               FromInt = GetInt(FromIter, FromExpr);
             if (ToExpr)
index f27f8b67e2c8f7f103ffe1d634bd29fc2ba84170..add96efd37b63468c4726067c99e197888fcb5ba 100644 (file)
@@ -985,6 +985,11 @@ namespace VariadicDefault {
     // CHECK-ELIDE-NOTREE: no viable overloaded '='
     // CHECK-ELIDE-NOTREE: no known conversion from 'B<(default) i1, (no argument)>' to 'B<i2, i3>'
 
+    B<i1, i2, i3> b4 = b1;
+    // CHECK-ELIDE-NOTREE: no viable conversion from 'B<[...], (no argument), (no argument)>' to 'B<[...], i2, i3>'
+    B<i2, i3> b5 = b1;
+    // CHECK-ELIDE-NOTREE: no viable conversion from 'B<(default) i1, (no argument)>' to 'B<i2, i3>'
+
     C<> c1;
     C<void, void> c2;
     C<char, char> c3;