[PATCH] D77598: Integral template argument suffix printing
arisKoutsou updated this revision to Diff 255810. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77598/new/ https://reviews.llvm.org/D77598 Files: clang/lib/AST/TemplateBase.cpp clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp clang/test/CXX/lex/lex.literal/lex.ext/p12.cpp clang/test/CodeGenCXX/debug-info-template.cpp clang/test/Index/print-type.cpp clang/test/Misc/integer-literal-printing.cpp clang/test/Modules/lsv-debuginfo.cpp clang/test/SemaCXX/builtin-align-cxx.cpp clang/test/SemaCXX/cxx11-ast-print.cpp clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp clang/test/SemaCXX/invalid-instantiated-field-decl.cpp clang/test/SemaCXX/vector.cpp clang/test/SemaTemplate/address_space-dependent.cpp clang/test/SemaTemplate/delegating-constructors.cpp clang/test/SemaTemplate/dependent-names.cpp clang/test/SemaTemplate/temp_arg_nontype.cpp 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 { 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/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/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_diffe
[PATCH] D77598: Integral template argument suffix printing
arisKoutsou updated this revision to Diff 255755. arisKoutsou added a comment. Herald added a subscriber: arphaman. Updated some tests to reflect the change in integral template argument printing(U and LL suffix). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77598/new/ https://reviews.llvm.org/D77598 Files: clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp clang/test/CXX/lex/lex.literal/lex.ext/p12.cpp clang/test/CodeGenCXX/debug-info-template.cpp clang/test/Index/print-type.cpp clang/test/Misc/integer-literal-printing.cpp clang/test/Modules/lsv-debuginfo.cpp clang/test/SemaCXX/builtin-align-cxx.cpp clang/test/SemaCXX/cxx11-ast-print.cpp clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp clang/test/SemaCXX/invalid-instantiated-field-decl.cpp clang/test/SemaCXX/vector.cpp clang/test/SemaTemplate/address_space-dependent.cpp clang/test/SemaTemplate/delegating-constructors.cpp clang/test/SemaTemplate/dependent-names.cpp 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/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/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<0x73>(); - 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<8388650LL>' requested here}} __attribute__((address_space(1))) char *x; __attribute__((address_space(2))) char *y; 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::Templ
[PATCH] D77598: Integral template argument suffix printing
arisKoutsou created this revision. arisKoutsou added a reviewer: v.g.vassilev. arisKoutsou added a project: clang. Herald added a subscriber: cfe-commits. Added 'U' suffix for unsigned integral types and 'LL' for 64-bit types. Some tests fail to pass due to this change, because they expect a diagnostic with integral literal without suffix. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D77598 Files: clang/lib/AST/TemplateBase.cpp clang/test/SemaTemplate/temp_arg_nontype.cpp 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 { Index: clang/lib/AST/TemplateBase.cpp === --- clang/lib/AST/TemplateBase.cpp +++ clang/lib/AST/TemplateBase.cpp @@ -77,6 +77,12 @@ Out << "'"; } else { Out << Val; +if (T->isBuiltinType()) { + if (Val.isUnsigned()) +Out << "U"; + if (Val.getBitWidth() == 64) +Out << "LL"; +} } } 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