From 9d1015f2df83d298ffa9b68d9791ece9db9656b8 Mon Sep 17 00:00:00 2001 From: Richard Trieu <rtrieu@google.com> Date: Tue, 22 Jul 2014 04:06:54 +0000 Subject: [PATCH] More gracefully handle parentheses in templare arguments in template diffing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213611 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/ASTDiagnostic.cpp | 3 ++- test/Misc/diag-template-diffing.cpp | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/AST/ASTDiagnostic.cpp b/lib/AST/ASTDiagnostic.cpp index 15e288acb9a..20540f3ce12 100644 --- a/lib/AST/ASTDiagnostic.cpp +++ b/lib/AST/ASTDiagnostic.cpp @@ -1184,7 +1184,8 @@ class TemplateDiff { } DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ArgExpr); if (!DRE) { - DRE = cast<DeclRefExpr>(cast<UnaryOperator>(ArgExpr)->getSubExpr()); + DRE = cast<DeclRefExpr>( + cast<UnaryOperator>(ArgExpr->IgnoreParens())->getSubExpr()); } return DRE->getDecl(); diff --git a/test/Misc/diag-template-diffing.cpp b/test/Misc/diag-template-diffing.cpp index 41cdca47126..391915ee970 100644 --- a/test/Misc/diag-template-diffing.cpp +++ b/test/Misc/diag-template-diffing.cpp @@ -1114,11 +1114,15 @@ struct Wrapper {}; template <class T> Wrapper<T> MakeWrapper(); -int global; +int global, global2; constexpr int * ptr = nullptr; 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>>' } // CHECK-ELIDE-NOTREE: {{[0-9]*}} errors generated. -- GitLab