Index: clang/lib/AST/TemplateBase.cpp =================================================================== --- clang/lib/AST/TemplateBase.cpp +++ clang/lib/AST/TemplateBase.cpp @@ -76,7 +76,32 @@ Out.write_escaped(StringRef(&Ch, 1), /*UseHexEscapes=*/ true); Out << "'"; } else { - Out << Val; + if (T->isBuiltinType()) { + switch (cast(T)->getKind()) { + case BuiltinType::ULongLong: + Out << Val << "ULL"; + break; + case BuiltinType::LongLong: + Out << Val << "LL"; + break; + case BuiltinType::ULong: + Out << Val << "UL"; + break; + case BuiltinType::Long: + Out << Val << "L"; + break; + case BuiltinType::Int: + Out << Val; + break; + default: + if (T->isUnsignedIntegerType()) + Out << Val << "U"; + else + Out << "(" << T->getCanonicalTypeInternal().getAsString(Policy) << ")" + << Val; + } + } else + Out << Val; } } Index: clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp =================================================================== --- clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp +++ clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp @@ -45,13 +45,13 @@ namespace std { template struct tuple_element; } // expected-note 2{{here}} void no_tuple_element_2() { - auto [a0, a1, a2] = A(); // expected-error {{implicit instantiation of undefined template 'std::tuple_element<0, A>'}} expected-note {{in implicit}} + auto [a0, a1, a2] = A(); // expected-error {{implicit instantiation of undefined template 'std::tuple_element<0UL, A>'}} expected-note {{in implicit}} } template<> struct std::tuple_element<0, A> { typedef float type; }; void no_tuple_element_3() { - auto [a0, a1, a2] = A(); // expected-error {{implicit instantiation of undefined template 'std::tuple_element<1, A>'}} expected-note {{in implicit}} + auto [a0, a1, a2] = A(); // expected-error {{implicit instantiation of undefined template 'std::tuple_element<1UL, A>'}} expected-note {{in implicit}} } template<> struct std::tuple_element<1, A> { typedef float &type; }; Index: clang/test/CXX/lex/lex.literal/lex.ext/p12.cpp =================================================================== --- clang/test/CXX/lex/lex.literal/lex.ext/p12.cpp +++ clang/test/CXX/lex/lex.literal/lex.ext/p12.cpp @@ -8,7 +8,7 @@ template<> struct check{}; template int operator""_x() { // #1 expected-warning {{string literal operator templates are a GNU extension}} - check chars; // expected-error {{implicit instantiation of undefined template 'check'}} expected-error {{implicit instantiation of undefined template 'check'}} + check chars; // expected-error {{implicit instantiation of undefined template 'check'}} expected-error {{implicit instantiation of undefined template 'check'}} return 1; } void *operator""_x(const char*); // #2 @@ -18,4 +18,4 @@ int d = "test"_x; // expected-note {{in instantiation of function template specialization 'operator""_x' requested here}} int e = uR"("ั‚ะตัั‚ ๐€€)"_x; int f = UR"("ั‚ะตัั‚ ๐€€)"_x; -int g = UR"("ั‚ะตัั‚_๐€€)"_x; // expected-note {{in instantiation of function template specialization 'operator""_x' requested here}} +int g = UR"("ั‚ะตัั‚_๐€€)"_x; // expected-note {{in instantiation of function template specialization 'operator""_x' requested here}} Index: clang/test/CodeGenCXX/debug-info-template.cpp =================================================================== --- clang/test/CodeGenCXX/debug-info-template.cpp +++ clang/test/CodeGenCXX/debug-info-template.cpp @@ -1,6 +1,6 @@ // RUN: %clang -S -emit-llvm -target x86_64-unknown_unknown -g %s -o - -std=c++11 | FileCheck %s -// CHECK: @tci = dso_local global %"struct.TC::nested" zeroinitializer, align 1, !dbg [[TCI:![0-9]+]] +// CHECK: @tci = dso_local global %"struct.TC::nested" zeroinitializer, align 1, !dbg [[TCI:![0-9]+]] // CHECK: @tcn = dso_local global %struct.TC zeroinitializer, align 1, !dbg [[TCN:![0-9]+]] // CHECK: @nn = dso_local global %struct.NN zeroinitializer, align 1, !dbg [[NN:![0-9]+]] @@ -31,7 +31,7 @@ // CHECK: ![[TCNESTED]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "nested", // CHECK-SAME: scope: ![[TC:[0-9]+]], -// CHECK: ![[TC]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "TC" +// CHECK: ![[TC]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "TC" // CHECK-SAME: templateParams: [[TCARGS:![0-9]*]] TC // CHECK: [[TCARGS]] = !{[[TCARG1:![0-9]*]], [[TCARG2:![0-9]*]], [[TCARG3:![0-9]*]], [[TCARG4:![0-9]*]], [[TCARG5:![0-9]*]], [[TCARG6:![0-9]*]], [[TCARG7:![0-9]*]]} Index: clang/test/Index/print-type.cpp =================================================================== --- clang/test/Index/print-type.cpp +++ clang/test/Index/print-type.cpp @@ -132,7 +132,7 @@ // CHECK: TypedefDecl=OtherType:26:18 (Definition) [type=outer::inner::Bar::OtherType] [typekind=Typedef] [canonicaltype=double] [canonicaltypekind=Double] [isPOD=1] // CHECK: TypedefDecl=ArrayType:27:15 (Definition) [type=outer::inner::Bar::ArrayType] [typekind=Typedef] [canonicaltype=int [5]] [canonicaltypekind=ConstantArray] [isPOD=1] // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1] -// CHECK: FieldDecl=baz:28:20 (Definition) [type=Baz] [typekind=Unexposed] [templateargs/3= [type=int] [typekind=Int]] [canonicaltype=outer::Baz] [canonicaltypekind=Record] [canonicaltemplateargs/3= [type=int] [typekind=Int]] [isPOD=1] +// CHECK: FieldDecl=baz:28:20 (Definition) [type=Baz] [typekind=Unexposed] [templateargs/3= [type=int] [typekind=Int]] [canonicaltype=outer::Baz] [canonicaltypekind=Record] [canonicaltemplateargs/3= [type=int] [typekind=Int]] [isPOD=1] // CHECK: TemplateRef=Baz:9:8 [type=] [typekind=Invalid] [isPOD=0] // CHECK: IntegerLiteral= [type=int] [typekind=Int] [isPOD=1] // CHECK: TemplateRef=Foo:4:8 [type=] [typekind=Invalid] [isPOD=0] Index: clang/test/Misc/integer-literal-printing.cpp =================================================================== --- clang/test/Misc/integer-literal-printing.cpp +++ clang/test/Misc/integer-literal-printing.cpp @@ -2,10 +2,10 @@ // PR11179 template class Type1 {}; -template void Function1(Type1& x) {} // expected-note{{candidate function [with T = -42] not viable: expects an l-value for 1st argument}} +template void Function1(Type1& x) {} // expected-note{{candidate function [with T = (short)-42] not viable: expects an l-value for 1st argument}} template class Type2 {}; -template void Function2(Type2& x) {} // expected-note{{candidate function [with T = 42] not viable: expects an l-value for 1st argument}} +template void Function2(Type2& x) {} // expected-note{{candidate function [with T = 42U] not viable: expects an l-value for 1st argument}} enum class boolTy : bool { b = 0, Index: clang/test/Modules/lsv-debuginfo.cpp =================================================================== --- clang/test/Modules/lsv-debuginfo.cpp +++ clang/test/Modules/lsv-debuginfo.cpp @@ -26,14 +26,14 @@ // CHECK: @__clang_ast = // This type isn't anchored anywhere, expect a full definition. -// CHECK: !DICompositeType({{.*}}, name: "AlignedCharArray<4, 16>", +// CHECK: !DICompositeType({{.*}}, name: "AlignedCharArray<4U, 16U>", // CHECK-SAME: elements: // C // CHECK: @__clang_ast = // Here, too. -// CHECK: !DICompositeType({{.*}}, name: "AlignedCharArray<4, 16>", +// CHECK: !DICompositeType({{.*}}, name: "AlignedCharArray<4U, 16U>", // CHECK-SAME: elements: #include Index: clang/test/SemaCXX/builtin-align-cxx.cpp =================================================================== --- clang/test/SemaCXX/builtin-align-cxx.cpp +++ clang/test/SemaCXX/builtin-align-cxx.cpp @@ -31,10 +31,10 @@ void test() { test_templated_arguments(); // fine test_templated_arguments(); - // expected-note@-1{{in instantiation of function template specialization 'test_templated_arguments'}} + // expected-note@-1{{in instantiation of function template specialization 'test_templated_arguments'}} // expected-note@-2{{forward declaration of 'fwddecl'}} test_templated_arguments(); // invalid alignment value - // expected-note@-1{{in instantiation of function template specialization 'test_templated_arguments'}} + // expected-note@-1{{in instantiation of function template specialization 'test_templated_arguments'}} } template Index: clang/test/SemaCXX/cxx11-ast-print.cpp =================================================================== --- clang/test/SemaCXX/cxx11-ast-print.cpp +++ clang/test/SemaCXX/cxx11-ast-print.cpp @@ -40,7 +40,7 @@ const char *p10 = 3.300e+15_fritz; template const char *operator"" _suffix(); -// CHECK: const char *PR23120 = operator""_suffix(); +// CHECK: const char *PR23120 = operator""_suffix(); const char *PR23120 = U"๐ท"_suffix; // PR28885 Index: clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp =================================================================== --- clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp +++ clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp @@ -34,7 +34,7 @@ { Matrix winI(0, 3); RGBFValue* inputPreL; - winI = { inputPreL->at() }; // expected-error {{call to deleted constructor of 'cva::Matrix &&'}} + winI = { inputPreL->at() }; // expected-error {{call to deleted constructor of 'cva::Matrix &&'}} } } Index: clang/test/SemaCXX/invalid-instantiated-field-decl.cpp =================================================================== --- clang/test/SemaCXX/invalid-instantiated-field-decl.cpp +++ clang/test/SemaCXX/invalid-instantiated-field-decl.cpp @@ -31,5 +31,5 @@ class InlineFunctionInfo { public: explicit InlineFunctionInfo() {} - SmallVector DevirtualizedCalls; // expected-note {{in instantiation of template class 'SmallVector' requested}} + SmallVector DevirtualizedCalls; // expected-note {{in instantiation of template class 'SmallVector' requested}} }; Index: clang/test/SemaCXX/vector.cpp =================================================================== --- clang/test/SemaCXX/vector.cpp +++ clang/test/SemaCXX/vector.cpp @@ -351,20 +351,20 @@ const TemplateVectorType::type Works = {}; const TemplateVectorType::type Works2 = {}; // expected-error@#1 {{invalid vector element type 'bool'}} - // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} + // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} const TemplateVectorType::type NoBool = {}; // expected-error@#1 {{invalid vector element type 'int __attribute__((ext_vector_type(4)))' (vector of 4 'int' values)}} - // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} + // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} const TemplateVectorType::type NoComplex = {}; // expected-error@#1 {{vector size not an integral multiple of component size}} - // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} + // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} const TemplateVectorType::type BadSize = {}; const TemplateVectorType::type Large = {}; // expected-error@#1 {{vector size too large}} - // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} + // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} const TemplateVectorType::type TooLarge = {}; // expected-error@#1 {{zero vector size}} - // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} + // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType' requested here}} const TemplateVectorType::type Zero = {}; // expected-error@#2 {{vector size too large}} Index: clang/test/SemaTemplate/address_space-dependent.cpp =================================================================== --- clang/test/SemaTemplate/address_space-dependent.cpp +++ clang/test/SemaTemplate/address_space-dependent.cpp @@ -84,8 +84,8 @@ template int __attribute__((address_space(B))) *same_template(); void test_same_template() { (void) same_template<0>(); } -template int __attribute__((address_space(A))) *different_template(); // expected-note {{candidate function [with A = 0]}} -template int __attribute__((address_space(B+1))) *different_template(); // expected-note {{candidate function [with B = 0]}} +template int __attribute__((address_space(A))) *different_template(); // expected-note {{candidate function [with A = 0U]}} +template int __attribute__((address_space(B+1))) *different_template(); // expected-note {{candidate function [with B = 0U]}} void test_different_template() { (void) different_template<0>(); } // expected-error {{call to 'different_template' is ambiguous}} template struct partial_spec_deduce_as; @@ -102,7 +102,7 @@ HasASTemplateFields<1> HASTF; neg<-1>(); // expected-note {{in instantiation of function template specialization 'neg<-1>' requested here}} correct<0x7FFFF3>(); - tooBig<8388650>(); // expected-note {{in instantiation of function template specialization 'tooBig<8388650>' requested here}} + tooBig<8388650>(); // expected-note {{in instantiation of function template specialization 'tooBig<8388650L>' requested here}} __attribute__((address_space(1))) char *x; __attribute__((address_space(2))) char *y; Index: clang/test/SemaTemplate/delegating-constructors.cpp =================================================================== --- clang/test/SemaTemplate/delegating-constructors.cpp +++ clang/test/SemaTemplate/delegating-constructors.cpp @@ -9,7 +9,7 @@ public: template string(const char (&str)[N]) - : string(str) {} // expected-error{{constructor for 'string<6>' creates a delegation cycle}} + : string(str) {} // expected-error{{constructor for 'string<6U>' creates a delegation cycle}} }; void f() { Index: clang/test/SemaTemplate/dependent-names.cpp =================================================================== --- clang/test/SemaTemplate/dependent-names.cpp +++ clang/test/SemaTemplate/dependent-names.cpp @@ -338,7 +338,7 @@ struct Y: Y { }; // expected-error{{circular inheritance between 'Y' and 'Y'}} }; typedef X<3> X3; -X3::Y<>::iterator it; // expected-error {{no type named 'iterator' in 'PR11421::X<3>::Y<3>'}} +X3::Y<>::iterator it; // expected-error {{no type named 'iterator' in 'PR11421::X<3U>::Y<3U>'}} } namespace rdar12629723 { Index: clang/test/SemaTemplate/temp_arg_nontype.cpp =================================================================== --- clang/test/SemaTemplate/temp_arg_nontype.cpp +++ clang/test/SemaTemplate/temp_arg_nontype.cpp @@ -270,6 +270,24 @@ void test_char_possibly_negative() { enable_if_char<'\x02'>::type i; } // expected-error{{enable_if_char<'\x02'>'; did you mean 'enable_if_char<'a'>::type'?}} void test_char_single_quote() { enable_if_char<'\''>::type i; } // expected-error{{enable_if_char<'\''>'; did you mean 'enable_if_char<'a'>::type'?}} void test_char_backslash() { enable_if_char<'\\'>::type i; } // expected-error{{enable_if_char<'\\'>'; did you mean 'enable_if_char<'a'>::type'?}} + + template struct enable_if_int {}; + template <> struct enable_if_int<1> { typedef int type; }; // expected-note{{'enable_if_int<1>::type' declared here}} + void test_int() { enable_if_int<2>::type i; } // expected-error{{enable_if_int<2>'; did you mean 'enable_if_int<1>::type'?}} + + template struct enable_if_unsigned_int {}; + template <> struct enable_if_unsigned_int<1> { typedef int type; }; // expected-note{{'enable_if_unsigned_int<1>::type' declared here}} + void test_unsigned_int() { enable_if_unsigned_int<2>::type i; } // expected-error{{enable_if_unsigned_int<2U>'; did you mean 'enable_if_unsigned_int<1>::type'?}} + + + template struct enable_if_unsigned_long_long {}; + template <> struct enable_if_unsigned_long_long<1> { typedef int type; }; // expected-note{{'enable_if_unsigned_long_long<1>::type' declared here}} + void test_unsigned_long_long() { enable_if_unsigned_long_long<2>::type i; } // expected-error{{enable_if_unsigned_long_long<2ULL>'; did you mean 'enable_if_unsigned_long_long<1>::type'?}} + + template struct enable_if_long_long {}; + template <> struct enable_if_long_long<1> { typedef int type; }; // expected-note{{'enable_if_long_long<1>::type' declared here}} + void test_long_long() { enable_if_long_long<2>::type i; } // expected-error{{enable_if_long_long<2LL>'; did you mean 'enable_if_long_long<1>::type'?}} + } namespace PR10579 {