aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Analysis/array-struct-region.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-09-05 17:11:15 +0000
committerJordan Rose <jordan_rose@apple.com>2012-09-05 17:11:15 +0000
commitbc009d4493838a4cd7b6a642ab81e0b1bb7d2055 (patch)
tree7371f37ef594d1dc365e902b7014ca06b5981c6b /clang/test/Analysis/array-struct-region.cpp
parentdc1123fcab8efd07980c7d970d42bb31c34c0288 (diff)
downloadllvm-bc009d4493838a4cd7b6a642ab81e0b1bb7d2055.zip
llvm-bc009d4493838a4cd7b6a642ab81e0b1bb7d2055.tar.gz
llvm-bc009d4493838a4cd7b6a642ab81e0b1bb7d2055.tar.bz2
Revert "[analyzer] Treat all struct values as regions (even rvalues)."
This turned out to have many implications, but what eventually seemed to make it unworkable was the fact that we can get struct values (as LazyCompoundVals) from other places besides return-by-value function calls; that is, we weren't actually able to "treat all struct values as regions" consistently across the entire analyzer core. Hopefully we'll be able to come up with an alternate solution soon. This reverts r163066 / 02df4f0aef142f00d4637cd851e54da2a123ca8e. llvm-svn: 163218
Diffstat (limited to 'clang/test/Analysis/array-struct-region.cpp')
-rw-r--r--clang/test/Analysis/array-struct-region.cpp87
1 files changed, 0 insertions, 87 deletions
diff --git a/clang/test/Analysis/array-struct-region.cpp b/clang/test/Analysis/array-struct-region.cpp
deleted file mode 100644
index 3581566..0000000
--- a/clang/test/Analysis/array-struct-region.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -verify -x c %s
-// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -verify -x c++ -analyzer-config c++-inlining=constructors %s
-
-void clang_analyzer_eval(int);
-
-struct S {
- int field;
-
-#if __cplusplus
- const struct S *getThis() const { return this; }
-#endif
-};
-
-struct S getS();
-
-
-void testAssignment() {
- struct S s = getS();
-
- if (s.field != 42) return;
- clang_analyzer_eval(s.field == 42); // expected-warning{{TRUE}}
-
- s.field = 0;
- clang_analyzer_eval(s.field == 0); // expected-warning{{TRUE}}
-
-#if __cplusplus
- clang_analyzer_eval(s.getThis() == &s); // expected-warning{{TRUE}}
-#endif
-}
-
-
-void testImmediateUse() {
- int x = getS().field;
-
- if (x != 42) return;
- clang_analyzer_eval(x == 42); // expected-warning{{TRUE}}
-
-#if __cplusplus
- clang_analyzer_eval((void *)getS().getThis() == (void *)&x); // expected-warning{{FALSE}}
-#endif
-}
-
-int getConstrainedField(struct S s) {
- if (s.field != 42) return 42;
- return s.field;
-}
-
-int getAssignedField(struct S s) {
- s.field = 42;
- return s.field;
-}
-
-void testArgument() {
- clang_analyzer_eval(getConstrainedField(getS()) == 42); // expected-warning{{TRUE}}
- clang_analyzer_eval(getAssignedField(getS()) == 42); // expected-warning{{TRUE}}
-}
-
-
-//--------------------
-// C++-only tests
-//--------------------
-
-#if __cplusplus
-void testReferenceAssignment() {
- const S &s = getS();
-
- if (s.field != 42) return;
- clang_analyzer_eval(s.field == 42); // expected-warning{{TRUE}}
-
- clang_analyzer_eval(s.getThis() == &s); // expected-warning{{TRUE}}
-}
-
-
-int getConstrainedFieldRef(const S &s) {
- if (s.field != 42) return 42;
- return s.field;
-}
-
-bool checkThis(const S &s) {
- return s.getThis() == &s;
-}
-
-void testReferenceArgument() {
- clang_analyzer_eval(getConstrainedFieldRef(getS()) == 42); // expected-warning{{TRUE}}
- clang_analyzer_eval(checkThis(getS())); // expected-warning{{TRUE}}
-}
-#endif