Template Type Diffing change
When all the arguments of a template are elided, print "A<...>" instead of "A<[2 * ...]>". Also remove comment fragment that means nothing. llvm-svn: 259445
This commit is contained in:
parent
cdb7882cb2
commit
12074509d7
|
@ -497,7 +497,7 @@ class TemplateDiff {
|
|||
enum DiffKind {
|
||||
/// Incomplete or invalid node.
|
||||
Invalid,
|
||||
/// Another level of templates, requires that
|
||||
/// Another level of templates
|
||||
Template,
|
||||
/// Type difference, all type differences except those falling under
|
||||
/// the Template difference.
|
||||
|
@ -1523,12 +1523,14 @@ class TemplateDiff {
|
|||
OS << FromTD->getNameAsString() << '<';
|
||||
Tree.MoveToChild();
|
||||
unsigned NumElideArgs = 0;
|
||||
bool AllArgsElided = true;
|
||||
do {
|
||||
if (ElideType) {
|
||||
if (Tree.NodeIsSame()) {
|
||||
++NumElideArgs;
|
||||
continue;
|
||||
}
|
||||
AllArgsElided = false;
|
||||
if (NumElideArgs > 0) {
|
||||
PrintElideArgs(NumElideArgs, Indent);
|
||||
NumElideArgs = 0;
|
||||
|
@ -1539,8 +1541,12 @@ class TemplateDiff {
|
|||
if (Tree.HasNextSibling())
|
||||
OS << ", ";
|
||||
} while (Tree.AdvanceSibling());
|
||||
if (NumElideArgs > 0)
|
||||
PrintElideArgs(NumElideArgs, Indent);
|
||||
if (NumElideArgs > 0) {
|
||||
if (AllArgsElided)
|
||||
OS << "...";
|
||||
else
|
||||
PrintElideArgs(NumElideArgs, Indent);
|
||||
}
|
||||
|
||||
Tree.Parent();
|
||||
OS << ">";
|
||||
|
|
|
@ -34,42 +34,38 @@ void set16(vector<vector<int> >) {}
|
|||
void test16() {
|
||||
set16(vector<const vector<int> >());
|
||||
}
|
||||
// CHECK: {{.*}}candidate function not viable: no known conversion from 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' to 'vector<vector<[...]>>' for 1st argument
|
||||
// CHECK: {{.*}}candidate function not viable: no known conversion from 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<...>>' to 'vector<vector<...>>' for 1st argument
|
||||
// TREE: {{.*}}candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// TREE: vector<
|
||||
// TREE: {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]](no qualifiers){{ ?}}[[RESET]]]{{ ?}}vector<
|
||||
// TREE: [...]>>
|
||||
// TREE: {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]](no qualifiers){{ ?}}[[RESET]]]{{ ?}}vector<...>>
|
||||
|
||||
void set17(vector<const vector<int> >) {}
|
||||
void test17() {
|
||||
set17(vector<vector<int> >());
|
||||
}
|
||||
// CHECK: candidate function not viable: no known conversion from 'vector<vector<[...]>>' to 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' for 1st argument
|
||||
// CHECK: candidate function not viable: no known conversion from 'vector<vector<...>>' to 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<...>>' for 1st argument
|
||||
// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// TREE: vector<
|
||||
// TREE: {{\[}}[[CYAN]](no qualifiers){{ ?}}[[RESET]]{{ ?}}!= [[CYAN]]const[[RESET]]] vector<
|
||||
// TREE: [...]>>
|
||||
// TREE: {{\[}}[[CYAN]](no qualifiers){{ ?}}[[RESET]]{{ ?}}!= [[CYAN]]const[[RESET]]] vector<...>>
|
||||
|
||||
void set18(vector<volatile vector<int> >) {}
|
||||
void test18() {
|
||||
set18(vector<const vector<int> >());
|
||||
}
|
||||
// CHECK: candidate function not viable: no known conversion from 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' to 'vector<[[CYAN]]volatile{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' for 1st argument
|
||||
// CHECK: candidate function not viable: no known conversion from 'vector<[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}vector<...>>' to 'vector<[[CYAN]]volatile{{ ?}}[[RESET]]{{ ?}}vector<...>>' for 1st argument
|
||||
// TREE: no matching function for call to 'set18'
|
||||
// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// TREE: vector<
|
||||
// TREE: {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]]volatile[[RESET]]] vector<
|
||||
// TREE: [...]>>
|
||||
// TREE: {{\[}}[[CYAN]]const{{ ?}}[[RESET]]{{ ?}}!= [[CYAN]]volatile[[RESET]]] vector<...>>
|
||||
|
||||
void set19(vector<const volatile vector<int> >) {}
|
||||
void test19() {
|
||||
set19(vector<const vector<int> >());
|
||||
}
|
||||
// CHECK: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<const [[CYAN]]volatile{{ ?}}[[RESET]]{{ ?}}vector<[...]>>' for 1st argument
|
||||
// CHECK: candidate function not viable: no known conversion from 'vector<const vector<...>>' to 'vector<const [[CYAN]]volatile{{ ?}}[[RESET]]{{ ?}}vector<...>>' for 1st argument
|
||||
// TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// TREE: vector<
|
||||
// TREE: [const != const [[CYAN]]volatile[[RESET]]] vector<
|
||||
// TREE: [...]>>
|
||||
// TREE: [const != const [[CYAN]]volatile[[RESET]]] vector<...>>
|
||||
|
||||
namespace default_args {
|
||||
template <int x, int y = 1+1, int z = 2>
|
||||
|
|
|
@ -45,5 +45,5 @@ namespace qualifiers {
|
|||
foo(bar, V);
|
||||
}
|
||||
|
||||
// CHECK: candidate template ignored: deduced conflicting types for parameter 'T' ('const vector<[...]>' vs. 'volatile vector<[...]>')
|
||||
// CHECK: candidate template ignored: deduced conflicting types for parameter 'T' ('const vector<...>' vs. 'volatile vector<...>')
|
||||
}
|
||||
|
|
|
@ -479,14 +479,13 @@ void test17() {
|
|||
set17(vector<const vector<int>>());
|
||||
}
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'set17'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<vector<[...]>>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<...>>' to 'vector<vector<...>>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'set17'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<int>>' to 'vector<vector<int>>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'set17'
|
||||
// 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: [const != (no qualifiers)] vector<
|
||||
// CHECK-ELIDE-TREE: [...]>>
|
||||
// CHECK-ELIDE-TREE: [const != (no qualifiers)] vector<...>>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'set17'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
|
@ -498,14 +497,13 @@ void test18() {
|
|||
set18(vector<vector<int>>());
|
||||
}
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'set18'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<vector<[...]>>' to 'vector<const vector<[...]>>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<vector<...>>' to 'vector<const vector<...>>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'set18'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<vector<int>>' to 'vector<const vector<int>>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'set18'
|
||||
// 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: [(no qualifiers) != const] vector<
|
||||
// CHECK-ELIDE-TREE: [...]>>
|
||||
// CHECK-ELIDE-TREE: [(no qualifiers) != const] vector<...>>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'set18'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
|
@ -517,14 +515,13 @@ void test19() {
|
|||
set19(vector<const vector<int>>());
|
||||
}
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'set19'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<volatile vector<[...]>>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<...>>' to 'vector<volatile vector<...>>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'set19'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<int>>' to 'vector<volatile vector<int>>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'set19'
|
||||
// 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: [const != volatile] vector<
|
||||
// CHECK-ELIDE-TREE: [...]>>
|
||||
// CHECK-ELIDE-TREE: [const != volatile] vector<...>>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'set19'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
|
@ -536,14 +533,13 @@ void test20() {
|
|||
set20(vector<const vector<int>>());
|
||||
}
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'set20'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<[...]>>' to 'vector<const volatile vector<[...]>>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<...>>' to 'vector<const volatile vector<...>>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'set20'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<const vector<int>>' to 'vector<const volatile vector<int>>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'set20'
|
||||
// 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: [const != const volatile] vector<
|
||||
// CHECK-ELIDE-TREE: [...]>>
|
||||
// CHECK-ELIDE-TREE: [const != const volatile] vector<...>>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'set20'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
|
@ -557,14 +553,13 @@ template<typename T> using U21 = volatile S21<T>;
|
|||
int f21(vector<const U21<int>>);
|
||||
int k21 = f21(vector<U21<int>>());
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'f21'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U21<[...]>>' to 'vector<const U21<[...]>>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U21<...>>' to 'vector<const U21<...>>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'f21'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U21<int>>' to 'vector<const U21<int>>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'f21'
|
||||
// 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: [(no qualifiers) != const] U21<
|
||||
// CHECK-ELIDE-TREE: [...]>>
|
||||
// CHECK-ELIDE-TREE: [(no qualifiers) != const] U21<...>>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'f21'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
|
@ -577,14 +572,13 @@ template<typename T> using U22 = volatile S22<T>;
|
|||
int f22(vector<volatile const U22<int>>);
|
||||
int k22 = f22(vector<volatile U22<int>>());
|
||||
// CHECK-ELIDE-NOTREE: no matching function for call to 'f22'
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U22<[...]>>' to 'vector<const U22<[...]>>' for 1st argument
|
||||
// CHECK-ELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U22<...>>' to 'vector<const U22<...>>' for 1st argument
|
||||
// CHECK-NOELIDE-NOTREE: no matching function for call to 'f22'
|
||||
// CHECK-NOELIDE-NOTREE: candidate function not viable: no known conversion from 'vector<U22<int>>' to 'vector<const U22<int>>' for 1st argument
|
||||
// CHECK-ELIDE-TREE: no matching function for call to 'f22'
|
||||
// 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: [(no qualifiers) != const] U22<
|
||||
// CHECK-ELIDE-TREE: [...]>>
|
||||
// CHECK-ELIDE-TREE: [(no qualifiers) != const] U22<...>>
|
||||
// CHECK-NOELIDE-TREE: no matching function for call to 'f22'
|
||||
// CHECK-NOELIDE-TREE: candidate function not viable: no known conversion from argument type to parameter type for 1st argument
|
||||
// CHECK-NOELIDE-TREE: vector<
|
||||
|
@ -1258,7 +1252,7 @@ using T = condition<(is_const())>;
|
|||
void foo(const T &t) {
|
||||
T &t2 = t;
|
||||
}
|
||||
// CHECK-ELIDE-NOTREE: binding value of type 'const condition<[...]>' to reference to type 'condition<[...]>' drops 'const' qualifier
|
||||
// CHECK-ELIDE-NOTREE: binding value of type 'const condition<...>' to reference to type 'condition<...>' drops 'const' qualifier
|
||||
}
|
||||
|
||||
namespace BoolArgumentBitExtended {
|
||||
|
@ -1390,7 +1384,7 @@ namespace DefaultNonTypeArgWithDependentType {
|
|||
template <typename SizeType = int, SizeType = 0> struct A {};
|
||||
template <typename R = A<>> R bar();
|
||||
A<> &foo() { return bar(); }
|
||||
// CHECK-ELIDE-NOTREE: error: non-const lvalue reference to type 'A<[2 * ...]>' cannot bind to a temporary of type 'A<[2 * ...]>'
|
||||
// CHECK-ELIDE-NOTREE: error: non-const lvalue reference to type 'A<...>' cannot bind to a temporary of type 'A<...>'
|
||||
// CHECK-NOELIDE-NOTREE: error: non-const lvalue reference to type 'A<int, 0>' cannot bind to a temporary of type 'A<int, 0>'
|
||||
}
|
||||
|
||||
|
@ -1423,8 +1417,8 @@ B<const A<>> b4 = B<>();
|
|||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'A<1>' to 'A<(default) 0>'
|
||||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'B<int>' to 'B<(default) ZeroArgs::A<0>>'
|
||||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'B<(default) ZeroArgs::A<0>>' to 'B<int>'
|
||||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'B<const A<[...]>>' to 'B<A<[...]>>'
|
||||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'B<A<[...]>>' to 'B<const A<[...]>>'
|
||||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'B<const A<...>>' to 'B<A<...>>'
|
||||
// CHECK-ELIDE-NOTREE: error: no viable conversion from 'B<A<...>>' to 'B<const A<...>>'
|
||||
}
|
||||
|
||||
// CHECK-ELIDE-NOTREE: {{[0-9]*}} errors generated.
|
||||
|
|
Loading…
Reference in New Issue