diff options
Diffstat (limited to 'test/Analysis/diagnostics/macros.cpp')
-rw-r--r-- | test/Analysis/diagnostics/macros.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/test/Analysis/diagnostics/macros.cpp b/test/Analysis/diagnostics/macros.cpp index 5aa2c03ab0..b3887b39a4 100644 --- a/test/Analysis/diagnostics/macros.cpp +++ b/test/Analysis/diagnostics/macros.cpp @@ -3,7 +3,7 @@ #include "../Inputs/system-header-simulator.h" #include "../Inputs/system-header-simulator-cxx.h" -void testIntMacro(unsigned int i) { +void testUnsignedIntMacro(unsigned int i) { if (i == UINT32_MAX) { // expected-note {{Assuming 'i' is equal to UINT32_MAX}} // expected-note@-1 {{Taking true branch}} char *p = NULL; // expected-note {{'p' initialized to a null pointer value}} @@ -12,6 +12,20 @@ void testIntMacro(unsigned int i) { } } + +// FIXME: 'i' can never be equal to UINT32_MAX - it doesn't even fit into its +// type ('int'). This should say "Assuming 'i' is equal to -1". +void testIntMacro(int i) { + if (i == UINT32_MAX) { // expected-note {{Assuming 'i' is equal to UINT32_MAX}} + // expected-note@-1 {{Taking true branch}} + char *p = NULL; // expected-note {{'p' initialized to a null pointer value}} + *p = 7; // expected-warning {{Dereference of null pointer (loaded from variable 'p')}} + // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} + } +} + + + void testNULLMacro(int *p) { if (p == NULL) { // expected-note {{Assuming 'p' is equal to NULL}} // expected-note@-1 {{Taking true branch}} @@ -30,7 +44,8 @@ void testnullptrMacro(int *p) { // There are no path notes on the comparison to float types. void testDoubleMacro(double d) { - if (d == DBL_MAX) { // expected-note {{Taking true branch}} + if (d == DBL_MAX) { // expected-note {{Assuming 'd' is equal to DBL_MAX}} + // expected-note@-1 {{Taking true branch}} char *p = NULL; // expected-note {{'p' initialized to a null pointer value}} *p = 7; // expected-warning {{Dereference of null pointer (loaded from variable 'p')}} @@ -46,3 +61,14 @@ void testboolMacro(bool b, int *p) { // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} } } + +#define nested_null_split(x) if ((x) != UINT32_MAX) {} + +void testNestedNullSplitMacro(int i, int *p) { + nested_null_split(i); // expected-note {{Assuming 'i' is equal to -1}} + // expected-note@-1 {{Taking false branch}} + if (!p) // expected-note {{Assuming 'p' is null}} + // expected-note@-1 {{Taking true branch}} + *p = 1; // expected-warning {{Dereference of null pointer (loaded from variable 'p')}} + // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} +} |