// RUN: %clang --analyze %s -o %t > /dev/null 2>&1 // RUN: FileCheck -input-file %t %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; } void test_assumptions(int a, int b) { if (a == 0) { return; } if (b != 0) { return; } int *p = 0; *p = 0xDEADBEEF; } // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: files // CHECK: // CHECK: // CHECK: diagnostics // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line5 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line5 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line6 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line6 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line6 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line6 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: line6 // 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: line6 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // 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: line12 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line12 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line12 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line12 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: line12 // 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: line12 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line16 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line16 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line19 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line19 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line19 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line19 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: line19 // 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: line19 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line23 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line23 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line23 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line23 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line23 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line23 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line23 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Assuming 'p' is null // CHECK: message // CHECK: Assuming 'p' is null // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line23 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line23 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line24 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line24 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line24 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line24 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: line24 // 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: line24 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line29 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line29 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line29 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line29 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line29 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line29 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line29 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Assuming 'q' is null // CHECK: message // CHECK: Assuming 'q' is null // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line29 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line29 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line30 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line31 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: line31 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line31 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line31 // CHECK: col6 // CHECK: file0 // CHECK: // CHECK: // CHECK: line31 // 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: line31 // CHECK: col5 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line36 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line36 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line36 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: line36 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line36 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: line36 // CHECK: col10 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line38 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line38 // CHECK: col8 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line38 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line38 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line38 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Dereference of null pointer (loaded from field 'p') // CHECK: message // CHECK: Dereference of null pointer (loaded from field 'p') // CHECK: // CHECK: // CHECK: descriptionDereference of null pointer (loaded from field 'p') // CHECK: categoryLogic error // CHECK: typeDereference of null pointer // CHECK: location // CHECK: // CHECK: line38 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: path // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line43 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line43 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line43 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line43 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line43 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line43 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line43 // CHECK: col12 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Assuming 'a' is not equal to 0 // CHECK: message // CHECK: Assuming 'a' is not equal to 0 // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line43 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line43 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line46 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line46 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line46 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line46 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line46 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line46 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line46 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line46 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line46 // CHECK: col12 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: extended_message // CHECK: Assuming 'b' is equal to 0 // CHECK: message // CHECK: Assuming 'b' is equal to 0 // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line46 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: line46 // CHECK: col7 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line49 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line49 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: // CHECK: // CHECK: start // CHECK: // CHECK: // CHECK: line49 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line49 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: end // CHECK: // CHECK: // CHECK: line50 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: line50 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: // CHECK: line50 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: // CHECK: line50 // CHECK: col4 // CHECK: file0 // CHECK: // CHECK: // CHECK: line50 // 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: line50 // CHECK: col3 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: // CHECK: