aboutsummaryrefslogtreecommitdiff
path: root/clang
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2014-08-04 04:35:10 +0000
committerBill Wendling <isanbard@gmail.com>2014-08-04 04:35:10 +0000
commit3869e6a78950823e8a162fdfe7f0f947d3ea0428 (patch)
treeabc10f3dd08a700c2bf91b88b30f4835735d89fb /clang
parentd8f7f82712a4173ce45e3a79d7d6c4010d2e9e9b (diff)
downloadllvm-3869e6a78950823e8a162fdfe7f0f947d3ea0428.zip
llvm-3869e6a78950823e8a162fdfe7f0f947d3ea0428.tar.gz
llvm-3869e6a78950823e8a162fdfe7f0f947d3ea0428.tar.bz2
Merging r213613:
------------------------------------------------------------------------ r213613 | rtrieu | 2014-07-21 21:42:15 -0700 (Mon, 21 Jul 2014) | 2 lines Fix '&' printing for template arguments in parentheses in template diffing. ------------------------------------------------------------------------ llvm-svn: 214692
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/ASTDiagnostic.cpp9
-rw-r--r--clang/test/Misc/diag-template-diffing.cpp8
2 files changed, 12 insertions, 5 deletions
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp
index 20540f3..5f78df2 100644
--- a/clang/lib/AST/ASTDiagnostic.cpp
+++ b/clang/lib/AST/ASTDiagnostic.cpp
@@ -994,7 +994,8 @@ class TemplateDiff {
bool FromAddressOf = false;
if (FromValueDecl) {
if (FromExpr) {
- if (UnaryOperator *UO = dyn_cast<UnaryOperator>(FromExpr)) {
+ if (UnaryOperator *UO =
+ dyn_cast<UnaryOperator>(FromExpr->IgnoreParens())) {
if (UO->getOpcode() == UO_AddrOf)
FromAddressOf = true;
}
@@ -1007,14 +1008,16 @@ class TemplateDiff {
bool ToAddressOf = false;
if (ToValueDecl) {
if (ToExpr) {
- if (UnaryOperator *UO = dyn_cast<UnaryOperator>(ToExpr)) {
+ if (UnaryOperator *UO =
+ dyn_cast<UnaryOperator>(ToExpr->IgnoreParens())) {
if (UO->getOpcode() == UO_AddrOf) {
ToAddressOf = true;
}
}
} else {
- if (!ArgumentType->isReferenceType())
+ if (!ArgumentType->isReferenceType()) {
ToAddressOf = true;
+ }
}
}
Tree.SetNode(FromValueDecl, ToValueDecl, FromAddressOf, ToAddressOf);
diff --git a/clang/test/Misc/diag-template-diffing.cpp b/clang/test/Misc/diag-template-diffing.cpp
index 391915e..fcafb332 100644
--- a/clang/test/Misc/diag-template-diffing.cpp
+++ b/clang/test/Misc/diag-template-diffing.cpp
@@ -1120,9 +1120,13 @@ Wrapper<S<ptr>> W = MakeWrapper<S<&global>>();
// Don't print an extra '&' for 'ptr'
// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<ptr>>'
-Wrapper<S<(&global2)>> W2 = MakeWrapper<S<&global>>();
// Handle parens correctly
-// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<global2>>'
+Wrapper<S<(&global2)>> W2 = MakeWrapper<S<&global>>();
+// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<&global2>>'
+Wrapper<S<&global2>> W3 = MakeWrapper<S<(&global)>>();
+// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<&global2>>'
+Wrapper<S<(&global2)>> W4 = MakeWrapper<S<(&global)>>();
+// CHECK-ELIDE-NOTREE: no viable conversion from 'Wrapper<S<&global>>' to 'Wrapper<S<&global2>>'
}
// CHECK-ELIDE-NOTREE: {{[0-9]*}} errors generated.