summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/inline.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2013-05-02 19:51:20 +0000
committerJordan Rose <jordan_rose@apple.com>2013-05-02 19:51:20 +0000
commitc76d7e3d96dc053865a7f334c41727346d67ec78 (patch)
tree0a268e7a99d14773b2d8efe336cbf362d4acd662 /clang/test/Analysis/inline.cpp
parentf3805157536d143210ec1822baa5733bb2c5beff (diff)
downloadbcm5719-llvm-c76d7e3d96dc053865a7f334c41727346d67ec78.tar.gz
bcm5719-llvm-c76d7e3d96dc053865a7f334c41727346d67ec78.zip
[analyzer] Don't try to evaluate MaterializeTemporaryExpr as a constant.
...and don't consider '0' to be a null pointer constant if it's the initializer for a float! Apparently null pointer constant evaluation looks through both MaterializeTemporaryExpr and ImplicitCastExpr, so we have to be more careful about types in the callers. For RegionStore this just means giving up a little more; for ExprEngine this means handling the MaterializeTemporaryExpr case explicitly. Follow-up to r180894. llvm-svn: 180944
Diffstat (limited to 'clang/test/Analysis/inline.cpp')
-rw-r--r--clang/test/Analysis/inline.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/clang/test/Analysis/inline.cpp b/clang/test/Analysis/inline.cpp
index 62bce284721..909e18017b3 100644
--- a/clang/test/Analysis/inline.cpp
+++ b/clang/test/Analysis/inline.cpp
@@ -262,12 +262,33 @@ namespace DefaultArgs {
}
int defaultReference(const int &input = 42) {
- return input;
+ return -input;
+ }
+ int defaultReferenceZero(const int &input = 0) {
+ return -input;
}
void testReference() {
- clang_analyzer_eval(defaultReference(1) == 1); // expected-warning{{TRUE}}
- clang_analyzer_eval(defaultReference() == 42); // expected-warning{{TRUE}}
+ clang_analyzer_eval(defaultReference(1) == -1); // expected-warning{{TRUE}}
+ clang_analyzer_eval(defaultReference() == -42); // expected-warning{{TRUE}}
+
+ clang_analyzer_eval(defaultReferenceZero(1) == -1); // expected-warning{{TRUE}}
+ clang_analyzer_eval(defaultReferenceZero() == 0); // expected-warning{{TRUE}}
+}
+
+ double defaultFloatReference(const double &i = 42) {
+ return -i;
+ }
+ double defaultFloatReferenceZero(const double &i = 0) {
+ return -i;
+ }
+
+ void testFloatReference() {
+ clang_analyzer_eval(defaultFloatReference(1) == -1); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(defaultFloatReference() == -42); // expected-warning{{UNKNOWN}}
+
+ clang_analyzer_eval(defaultFloatReferenceZero(1) == -1); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(defaultFloatReferenceZero() == 0); // expected-warning{{UNKNOWN}}
}
}
OpenPOWER on IntegriCloud