summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-12-15 10:00:35 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-12-15 10:00:35 +0000
commit7e21745e2249c118ca71dee4aaf1346b12650aea (patch)
tree1db785e41a20de0a88f7dee23aeca71bc7dd2192
parent79c79e3e8a815e778157590bbeea22afaff425f8 (diff)
downloadbcm5719-llvm-7e21745e2249c118ca71dee4aaf1346b12650aea.tar.gz
bcm5719-llvm-7e21745e2249c118ca71dee4aaf1346b12650aea.zip
Sema: Don't diagnose string + int if the int is value dependent
Don't send a value dependent expression into the expression evaluator, HandleSizeof would crash. Making HandleSizeof handle dependent types would noisily warn about the operation even if everything turns out OK after instantiation. This fixes PR21848. llvm-svn: 224240
-rw-r--r--clang/lib/Sema/SemaExpr.cpp2
-rw-r--r--clang/test/SemaCXX/string-plus-int.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index c04b99d464c..876e5b71e01 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -7282,7 +7282,7 @@ static void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc,
bool IsStringPlusInt = StrExpr &&
IndexExpr->getType()->isIntegralOrUnscopedEnumerationType();
- if (!IsStringPlusInt)
+ if (!IsStringPlusInt || IndexExpr->isValueDependent())
return;
llvm::APSInt index;
diff --git a/clang/test/SemaCXX/string-plus-int.cpp b/clang/test/SemaCXX/string-plus-int.cpp
index 5752f8f9663..fe9c7194969 100644
--- a/clang/test/SemaCXX/string-plus-int.cpp
+++ b/clang/test/SemaCXX/string-plus-int.cpp
@@ -64,3 +64,8 @@ void f(int index) {
consume(A B + sizeof(A) - 1);
}
+template <typename T>
+void PR21848() {
+ (void)(sizeof(T) + ""); // expected-warning {{to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}
+}
+template void PR21848<int>(); // expected-note {{in instantiation of function template specialization 'PR21848<int>' requested here}}
OpenPOWER on IntegriCloud