diff options
author | Richard Trieu <rtrieu@google.com> | 2014-07-26 02:10:52 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2014-07-26 02:10:52 +0000 |
commit | 97bacec221dbaffa74825a180efaa6684a65f6d9 (patch) | |
tree | c980a878b60df6a9b1aff88d86f716ab52a625c0 /clang/lib/AST/ASTDiagnostic.cpp | |
parent | 1bf4d19172879e42eeb595e6337e8b358f6469c9 (diff) | |
download | bcm5719-llvm-97bacec221dbaffa74825a180efaa6684a65f6d9.tar.gz bcm5719-llvm-97bacec221dbaffa74825a180efaa6684a65f6d9.zip |
If a template argument is non-evaluable expression, use the profile ID to see
if the two arguments are equal.
llvm-svn: 214008
Diffstat (limited to 'clang/lib/AST/ASTDiagnostic.cpp')
-rw-r--r-- | clang/lib/AST/ASTDiagnostic.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp index ad71335add7..8c8b1dff0cb 100644 --- a/clang/lib/AST/ASTDiagnostic.cpp +++ b/clang/lib/AST/ASTDiagnostic.cpp @@ -1291,11 +1291,8 @@ class TemplateDiff { if (!FromExpr || !ToExpr) return false; - FromExpr = FromExpr->IgnoreParens(); - ToExpr = ToExpr->IgnoreParens(); - - DeclRefExpr *FromDRE = dyn_cast<DeclRefExpr>(FromExpr), - *ToDRE = dyn_cast<DeclRefExpr>(ToExpr); + DeclRefExpr *FromDRE = dyn_cast<DeclRefExpr>(FromExpr->IgnoreParens()), + *ToDRE = dyn_cast<DeclRefExpr>(ToExpr->IgnoreParens()); if (FromDRE || ToDRE) { if (!FromDRE || !ToDRE) @@ -1305,8 +1302,12 @@ class TemplateDiff { Expr::EvalResult FromResult, ToResult; if (!FromExpr->EvaluateAsRValue(FromResult, Context) || - !ToExpr->EvaluateAsRValue(ToResult, Context)) - return false; + !ToExpr->EvaluateAsRValue(ToResult, Context)) { + llvm::FoldingSetNodeID FromID, ToID; + FromExpr->Profile(FromID, Context, true); + ToExpr->Profile(ToID, Context, true); + return FromID == ToID; + } APValue &FromVal = FromResult.Val; APValue &ToVal = ToResult.Val; |