// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-output=plist -o - %s | FileCheck %s void test_null_init(void) { int *p = 0; *p = 0xDEADBEEF; } void test_null_assign(void) { int *p; p = 0; *p = 0xDEADBEEF; } void test_null_assign_transitive(void) { int *p; p = 0; int *q = p; *q = 0xDEADBEEF; } void test_null_cond(int *p) { if (!p) { *p = 0xDEADBEEF; } } void test_null_cond_transitive(int *q) { if (!q) { int *p = q; *p = 0xDEADBEEF; } } void test_null_field(void) { struct s { int *p; } x; x.p = 0; *(x.p) = 0xDEADBEEF; } // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: files // CHECK: // CHECK: // CHECK: diagnostics // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line4 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line4 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line4 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Variable 'p' initialized to a null pointer value // CHECK: message // CHECK: Variable 'p' initialized to a null pointer value // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line4 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line4 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line5 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line5 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line5 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line5 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line5 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer loaded from variable 'p' // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line5 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line9 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line9 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Null pointer value stored to 'p' // CHECK: message // CHECK: Null pointer value stored to 'p' // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line10 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line11 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line11 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line11 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line11 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line11 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer loaded from variable 'p' // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line11 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line15 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line15 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line17 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line17 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line17 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line17 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line17 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Variable 'q' initialized to a null pointer value // CHECK: message // CHECK: Variable 'q' initialized to a null pointer value // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line17 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line17 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line18 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line18 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line18 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line18 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line18 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer loaded from variable 'q' // CHECK: message // CHECK: Dereference of null pointer loaded from variable 'q' // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer loaded from variable 'q' // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line18 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line22 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line22 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line22 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line22 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line22 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line22 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line22 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Assuming pointer value is null // CHECK: message // CHECK: Assuming pointer value is null // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line22 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line22 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line23 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line23 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line23 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line23 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line23 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer loaded from variable 'p' // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line23 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line28 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line28 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line28 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line28 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line28 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line28 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line28 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Assuming pointer value is null // CHECK: message // CHECK: Assuming pointer value is null // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line28 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line28 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line29 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line29 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line29 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line29 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line30 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line30 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: message // CHECK: Dereference of null pointer loaded from variable 'p' // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer loaded from variable 'p' // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line35 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line35 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line35 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: line35 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line35 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: line35 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line37 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line37 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line37 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line37 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line37 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer // CHECK: message // CHECK: Dereference of null pointer // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line37 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: