summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRichard Trieu <rtrieu@google.com>2011-07-15 00:00:51 +0000
committerRichard Trieu <rtrieu@google.com>2011-07-15 00:00:51 +0000
commitcfe3926ae99e2db2452c036aba330f3e698d2b7f (patch)
tree6da68793430e4f44b178ac58adf9efb7d324bfae /clang/lib
parente625325d9f920e49e18e6aef47b05e87405b7717 (diff)
downloadbcm5719-llvm-cfe3926ae99e2db2452c036aba330f3e698d2b7f.tar.gz
bcm5719-llvm-cfe3926ae99e2db2452c036aba330f3e698d2b7f.zip
Remove warnings of constant operands of logical operators from template instantiations. Upon instantiation of template, value-dependent parameters are replaced by equivalent literals, so code like:
template<unsigned int A, unsigned int B> struct S { int foo() { int x = A && B; } } will not warn on A && B on every instantiation. This will still warn on other cases inside templates, which will be caught on checking the template definition. llvm-svn: 135222
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 22185ed69ec..a99a5d2cc42 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -6528,8 +6528,8 @@ inline QualType Sema::CheckLogicalOperands( // C99 6.5.[13,14]
// is a constant.
if (lex.get()->getType()->isIntegerType() && !lex.get()->getType()->isBooleanType() &&
rex.get()->getType()->isIntegerType() && !rex.get()->isValueDependent() &&
- // Don't warn in macros.
- !Loc.isMacroID()) {
+ // Don't warn in macros or template instantiations.
+ !Loc.isMacroID() && ActiveTemplateInstantiations.empty()) {
// If the RHS can be constant folded, and if it constant folds to something
// that isn't 0 or 1 (which indicate a potential logical operation that
// happened to fold to true/false) then warn.
OpenPOWER on IntegriCloud