| // RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.core,debug.ExprInspection -verify -analyzer-config eagerly-assume=false -triple x86_64-pc-linux-gnu %s |
| |
| // RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.core,debug.ExprInspection -verify -analyzer-config eagerly-assume=false -triple i386-pc-linux-gnu %s |
| |
| int clang_analyzer_eval(int); |
| |
| typedef struct { |
| int a : 1; |
| int b[2]; |
| } BITFIELD_CAST; |
| |
| void array_struct_bitfield_1() { |
| BITFIELD_CAST ff = {0}; |
| BITFIELD_CAST *pff = &ff; |
| clang_analyzer_eval(*((int *)pff + 1) == 0); // expected-warning{{TRUE}} |
| ff.b[0] = 3; |
| clang_analyzer_eval(*((int *)pff + 1) == 3); // expected-warning{{TRUE}} |
| } |
| |
| int array_struct_bitfield_2() { |
| BITFIELD_CAST ff = {0}; |
| BITFIELD_CAST *pff = &ff; |
| int a = *((int *)pff + 2); // expected-warning{{Assigned value is garbage or undefined [core.uninitialized.Assign]}} |
| return a; |
| } |
| |
| typedef struct { |
| unsigned int a : 1; |
| unsigned int x : 31; |
| unsigned int c : 1; |
| int b[2]; |
| } mystruct; |
| |
| void array_struct_bitfield_3() { |
| mystruct ff; |
| mystruct *pff = &ff; |
| ff.b[0] = 3; |
| clang_analyzer_eval(*((int *)pff + 2) == 3); // expected-warning{{TRUE}} |
| } |