summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/templates.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-09-10 21:27:35 +0000
committerJordan Rose <jordan_rose@apple.com>2012-09-10 21:27:35 +0000
commit1e0e4001c83db629cfb0f38157379fa09bef6cb4 (patch)
tree1efd546bd0d1fa836b6a716858ffdb590432b1f5 /clang/test/Analysis/templates.cpp
parentca1e27be0deda2a163bb7817fcd80c29d415544f (diff)
downloadbcm5719-llvm-1e0e4001c83db629cfb0f38157379fa09bef6cb4.tar.gz
bcm5719-llvm-1e0e4001c83db629cfb0f38157379fa09bef6cb4.zip
[analyzer] For now, don't inline C++ standard library functions.
This is a (heavy-handed) solution to PR13724 -- until we know we can do a good job inlining the STL, it's best to be consistent and not generate more false positives than we did before. We can selectively whitelist certain parts of the 'std' namespace that are known to be safe. This is controlled by analyzer config option 'c++-stdlib-inlining', which can be set to "true" or "false". This commit also adds control for whether or not to inline any templated functions (member or non-member), under the config option 'c++-template-inlining'. This option is currently on by default. llvm-svn: 163548
Diffstat (limited to 'clang/test/Analysis/templates.cpp')
-rw-r--r--clang/test/Analysis/templates.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/test/Analysis/templates.cpp b/clang/test/Analysis/templates.cpp
index 671aa785820..faa5c1a7620 100644
--- a/clang/test/Analysis/templates.cpp
+++ b/clang/test/Analysis/templates.cpp
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -fblocks -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -fblocks -analyzer-config c++-template-inlining=false -DNO_INLINE -verify %s
void clang_analyzer_eval(bool);
@@ -39,6 +40,11 @@ inline unsigned array_lengthof(T (&)[N]) {
void testNonTypeTemplateInstantiation() {
const char *S[] = { "a", "b" };
- clang_analyzer_eval(array_lengthof(S) == 2); // expected-warning{{TRUE}}
+ clang_analyzer_eval(array_lengthof(S) == 2);
+#ifndef NO_INLINE
+ // expected-warning@-2 {{TRUE}}
+#else
+ // expected-warning@-4 {{UNKNOWN}}
+#endif
}
OpenPOWER on IntegriCloud