Ted Kremenek 98a24e37c5 Begin reworking static analyzer support for C++ method calls. The current logic was divorced
from how we process ordinary function calls, had a tremendous about of redundancy, and relied
strictly on inlining behavior (which was incomplete) to provide semantics instead of falling
back to the conservative analysis we use for C functions.  This is a significant step into
making C++ analyzer support more useful.

llvm-svn: 128557
2011-03-30 17:41:19 +00:00

32 lines
678 B
C

// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-inline-call -analyzer-store region -verify %s
// XFAIL: *
int test1_f1() {
int y = 1;
y++;
return y;
}
void test1_f2() {
int x = 1;
x = test1_f1();
if (x == 1) {
int *p = 0;
*p = 3; // no-warning
}
if (x == 2) {
int *p = 0;
*p = 3; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}}
}
}
// Test that inlining works when the declared function has less arguments
// than the actual number in the declaration.
void test2_f1() {}
int test2_f2();
void test2_f3() {
test2_f1(test2_f2()); // expected-warning{{too many arguments in call to 'test2_f1'}}
}