summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/inline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Analysis/inline.cpp')
-rw-r--r--clang/test/Analysis/inline.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/clang/test/Analysis/inline.cpp b/clang/test/Analysis/inline.cpp
index 6b9a885f50f..65907762662 100644
--- a/clang/test/Analysis/inline.cpp
+++ b/clang/test/Analysis/inline.cpp
@@ -193,3 +193,37 @@ namespace Invalidation {
}
};
}
+
+namespace DefaultArgs {
+ int takesDefaultArgs(int i = 42) {
+ return -i;
+ }
+
+ void testFunction() {
+ clang_analyzer_eval(takesDefaultArgs(1) == -1); // expected-warning{{TRUE}}
+ clang_analyzer_eval(takesDefaultArgs() == -42); // expected-warning{{TRUE}}
+ }
+
+ class Secret {
+ public:
+ static const int value = 42;
+ int get(int i = value) {
+ return i;
+ }
+ };
+
+ void testMethod() {
+ Secret obj;
+ clang_analyzer_eval(obj.get(1) == 1); // expected-warning{{TRUE}}
+
+ // FIXME: Should be 'TRUE'. See PR13673 or <rdar://problem/11720796>.
+ clang_analyzer_eval(obj.get() == 42); // expected-warning{{UNKNOWN}}
+
+ // FIXME: Even if we constrain the variable, we still have a problem.
+ // See PR13385 or <rdar://problem/12156507>.
+ if (Secret::value != 42)
+ return;
+ clang_analyzer_eval(Secret::value == 42); // expected-warning{{TRUE}}
+ clang_analyzer_eval(obj.get() == 42); // expected-warning{{UNKNOWN}}
+ }
+}
OpenPOWER on IntegriCloud