| // RUN: %clang_analyze_cc1 -analyzer-checker=core,unix \ | |
| // RUN: -analyzer-disable-checker=core.uninitialized \ | |
| // RUN: -verify %s | |
| // NOTE: These tests correspond to examples provided in documentation | |
| // of [[clang::suppress]]. If you break them intentionally, it's likely that | |
| // you need to update the documentation! | |
| typedef __typeof(sizeof(int)) size_t; | |
| void *malloc(size_t); | |
| int foo_initial() { | |
| int *x = nullptr; | |
| return *x; // expected-warning{{Dereference of null pointer (loaded from variable 'x')}} | |
| } | |
| int foo1() { | |
| int *x = nullptr; | |
| [[clang::suppress]] | |
| return *x; // null pointer dereference warning suppressed here | |
| } | |
| int foo2() { | |
| [[clang::suppress]] { | |
| int *x = nullptr; | |
| return *x; // null pointer dereference warning suppressed here | |
| } | |
| } | |
| int bar_initial(bool coin_flip) { | |
| int *result = (int *)malloc(sizeof(int)); | |
| if (coin_flip) | |
| return 1; // There's no warning here YET, but it will show up if the other one is suppressed. | |
| return *result; // expected-warning{{Potential leak of memory pointed to by 'result'}} | |
| } | |
| int bar1(bool coin_flip) { | |
| __attribute__((suppress)) | |
| int *result = (int *)malloc(sizeof(int)); | |
| if (coin_flip) | |
| return 1; // warning about this leak path is suppressed | |
| return *result; // warning about this leak path also suppressed | |
| } | |
| int bar2(bool coin_flip) { | |
| int *result = (int *)malloc(sizeof(int)); | |
| if (coin_flip) | |
| return 1; // expected-warning{{Potential leak of memory pointed to by 'result'}} | |
| __attribute__((suppress)) | |
| return *result; // leak warning is suppressed only on this path | |
| } | |
| class [[clang::suppress]] C { | |
| int foo() { | |
| int *x = nullptr; | |
| return *x; // warnings suppressed in the entire class | |
| } | |
| int bar(); | |
| }; | |
| int C::bar() { | |
| int *x = nullptr; | |
| return *x; // expected-warning{{Dereference of null pointer (loaded from variable 'x')}} | |
| } |