Pass the PrintingPolicy when converting types to strings in template type
diffing. This removes extra "struct"/"class" in the type names and gives "bool" instead of "_Bool" for booleans. llvm-svn: 213912
This commit is contained in:
parent
a20a5d50ba
commit
d86c901f29
|
@ -1467,7 +1467,7 @@ class TemplateDiff {
|
|||
"Only one template argument may be missing.");
|
||||
|
||||
if (Same) {
|
||||
OS << FromType.getAsString();
|
||||
OS << FromType.getAsString(Policy);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1482,14 +1482,15 @@ class TemplateDiff {
|
|||
}
|
||||
|
||||
std::string FromTypeStr = FromType.isNull() ? "(no argument)"
|
||||
: FromType.getAsString();
|
||||
: FromType.getAsString(Policy);
|
||||
std::string ToTypeStr = ToType.isNull() ? "(no argument)"
|
||||
: ToType.getAsString();
|
||||
: ToType.getAsString(Policy);
|
||||
// Switch to canonical typename if it is better.
|
||||
// TODO: merge this with other aka printing above.
|
||||
if (FromTypeStr == ToTypeStr) {
|
||||
std::string FromCanTypeStr = FromType.getCanonicalType().getAsString();
|
||||
std::string ToCanTypeStr = ToType.getCanonicalType().getAsString();
|
||||
std::string FromCanTypeStr =
|
||||
FromType.getCanonicalType().getAsString(Policy);
|
||||
std::string ToCanTypeStr = ToType.getCanonicalType().getAsString(Policy);
|
||||
if (FromCanTypeStr != ToCanTypeStr) {
|
||||
FromTypeStr = FromCanTypeStr;
|
||||
ToTypeStr = ToCanTypeStr;
|
||||
|
|
|
@ -24,17 +24,17 @@ namespace std {
|
|||
}
|
||||
} // end namespace std
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'f'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<class std::basic_string>' to 'vector<class versa_string>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<std::basic_string>' to 'vector<versa_string>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'f'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<class std::basic_string>' to 'vector<class versa_string>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<std::basic_string>' to 'vector<versa_string>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'f'
|
||||
// CHECK-ELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-ELIDE-TREE: vector<
|
||||
// CHECK-ELIDE-TREE: [class std::basic_string != class versa_string]>
|
||||
// CHECK-ELIDE-TREE: [std::basic_string != versa_string]>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'f'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
// CHECK-NOELIDE-TREE: [class std::basic_string != class versa_string]>
|
||||
// CHECK-NOELIDE-TREE: [std::basic_string != versa_string]>
|
||||
|
||||
template <int... A>
|
||||
class I1{};
|
||||
|
@ -1047,7 +1047,7 @@ namespace DependentInt {
|
|||
using T2 = M<C<N>>;
|
||||
T2 p;
|
||||
T1 x = p;
|
||||
// CHECK-ELIDE-NOTREE: no viable conversion from 'M<C<struct DependentInt::N, INT<1>>>' to 'M<C<int, INT<0>>>'
|
||||
// CHECK-ELIDE-NOTREE: no viable conversion from 'M<C<DependentInt::N, INT<1>>>' to 'M<C<int, INT<0>>>'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1064,7 +1064,7 @@ template <typename T, typename A = allocator<const Atom *> > class vector {};
|
|||
void foo() {
|
||||
vector<Atom *> v;
|
||||
AtomVector v2(v);
|
||||
// CHECK-ELIDE-NOTREE: no known conversion from 'vector<class PR17510::Atom *, [...]>' to 'const vector<const class PR17510::Atom *, [...]>'
|
||||
// CHECK-ELIDE-NOTREE: no known conversion from 'vector<PR17510::Atom *, [...]>' to 'const vector<const PR17510::Atom *, [...]>'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1204,6 +1204,14 @@ T<B> t6 = T<A, A>();
|
|||
// CHECK-ELIDE-NOTREE: no viable conversion from 'T<template A, [...]>' to 'T<template B, [...]>'
|
||||
}
|
||||
|
||||
namespace Bool {
|
||||
template <class> class A{};
|
||||
A<bool> a1 = A<int>();
|
||||
// CHECK-ELIDE-NOTREE: no viable conversion from 'A<int>' to 'A<bool>'
|
||||
A<int> a2 = A<bool>();
|
||||
// CHECK-ELIDE-NOTREE: no viable conversion from 'A<bool>' to 'A<int>'
|
||||
}
|
||||
|
||||
// CHECK-ELIDE-NOTREE: {{[0-9]*}} errors generated.
|
||||
// CHECK-NOELIDE-NOTREE: {{[0-9]*}} errors generated.
|
||||
// CHECK-ELIDE-TREE: {{[0-9]*}} errors generated.
|
||||
|
|
Loading…
Reference in New Issue