diff options
author | Artem Dergachev <artem.dergachev@gmail.com> | 2019-04-23 21:30:30 +0000 |
---|---|---|
committer | Artem Dergachev <artem.dergachev@gmail.com> | 2019-04-23 21:30:30 +0000 |
commit | a746f2b73c39c2043cb75cd4210f87c2b3e347cc (patch) | |
tree | 37d4dc27ad47a5f4dd4d9b8ba8a0783504d7456d /clang/test/Analysis | |
parent | ace7a086ca38738385b84d72b8e2df57ee14bf43 (diff) | |
download | bcm5719-llvm-a746f2b73c39c2043cb75cd4210f87c2b3e347cc.tar.gz bcm5719-llvm-a746f2b73c39c2043cb75cd4210f87c2b3e347cc.zip |
[analyzer] Fix macro names in diagnostics within bigger macros.
If macro "CHECK_X(x)" expands to something like "if (x != NULL) ...",
the "Assuming..." note no longer says "Assuming 'x' is equal to CHECK_X".
Differential Revision: https://reviews.llvm.org/D59121
llvm-svn: 359037
Diffstat (limited to 'clang/test/Analysis')
-rw-r--r-- | clang/test/Analysis/diagnostics/macros.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/clang/test/Analysis/diagnostics/macros.cpp b/clang/test/Analysis/diagnostics/macros.cpp index 67cdef7f389..b3887b39a44 100644 --- a/clang/test/Analysis/diagnostics/macros.cpp +++ b/clang/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}} @@ -47,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')}} +} |