1*faabdfcfSRashmi Mudduluru // RUN: %clang_analyze_cc1 -analyzer-checker=core,apiModeling.TrustReturnsNonnull -verify %s 2*faabdfcfSRashmi Mudduluru 3*faabdfcfSRashmi Mudduluru int *foo() __attribute__((returns_nonnull)); 4*faabdfcfSRashmi Mudduluru 5*faabdfcfSRashmi Mudduluru int *foo_no_attribute(); 6*faabdfcfSRashmi Mudduluru test_foo()7*faabdfcfSRashmi Mudduluruint test_foo() { 8*faabdfcfSRashmi Mudduluru int *x = foo(); 9*faabdfcfSRashmi Mudduluru if (x) {} 10*faabdfcfSRashmi Mudduluru return *x; // no-warning 11*faabdfcfSRashmi Mudduluru } 12*faabdfcfSRashmi Mudduluru test_foo_no_attribute()13*faabdfcfSRashmi Mudduluruint test_foo_no_attribute() { 14*faabdfcfSRashmi Mudduluru int *x = foo_no_attribute(); 15*faabdfcfSRashmi Mudduluru if (x) {} 16*faabdfcfSRashmi Mudduluru return *x; // expected-warning{{Dereference of null pointer}} 17*faabdfcfSRashmi Mudduluru } 18*faabdfcfSRashmi Mudduluru test(void * (* f)(void))19*faabdfcfSRashmi Mudduluruvoid test(void *(*f)(void)) { 20*faabdfcfSRashmi Mudduluru f(); // Shouldn't crash compiler 21*faabdfcfSRashmi Mudduluru } 22