summaryrefslogtreecommitdiffstats
path: root/test/Analysis/array-struct-region.cpp
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2013-12-22 00:07:40 +0000
committerdim <dim@FreeBSD.org>2013-12-22 00:07:40 +0000
commit952eddef9aff85b1e92626e89baaf7a360e2ac85 (patch)
treedf8df0b0067b381eab470a3b8f28d14a552a6340 /test/Analysis/array-struct-region.cpp
parentea266cad53e3d49771fa38103913d3ec7a166694 (diff)
downloadFreeBSD-src-952eddef9aff85b1e92626e89baaf7a360e2ac85.zip
FreeBSD-src-952eddef9aff85b1e92626e89baaf7a360e2ac85.tar.gz
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
https://llvm.org/svn/llvm-project/cfe/branches/release_34@197841
Diffstat (limited to 'test/Analysis/array-struct-region.cpp')
-rw-r--r--test/Analysis/array-struct-region.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/test/Analysis/array-struct-region.cpp b/test/Analysis/array-struct-region.cpp
index 12ae5d3..4777686 100644
--- a/test/Analysis/array-struct-region.cpp
+++ b/test/Analysis/array-struct-region.cpp
@@ -21,7 +21,7 @@ struct S {
#if __cplusplus
const struct S *operator -(const struct S &s) { return &s; }
-bool operator ~(const struct S &s) { return &s != &s; }
+bool operator ~(const struct S &s) { return (&s) != &s; }
#endif
@@ -173,4 +173,27 @@ void testImmediateUseOp() {
clang_analyzer_eval(getConstrainedFieldRefOp(getS()) == 42); // expected-warning{{TRUE}}
}
+namespace EmptyClass {
+ struct Base {
+ int& x;
+
+ Base(int& x) : x(x) {}
+ };
+
+ struct Derived : public Base {
+ Derived(int& x) : Base(x) {}
+
+ void operator=(int a) { x = a; }
+ };
+
+ Derived ref(int& a) { return Derived(a); }
+
+ // There used to be a warning here, because analyzer treated Derived as empty.
+ int test() {
+ int a;
+ ref(a) = 42;
+ return a; // no warning
+ }
+}
+
#endif
OpenPOWER on IntegriCloud