| /* The bitfield type (int) may be shared, but slices are not de-duplicated. |
| |
| In this testcase, it is expected to see a total of 6 CTF slices and 2 CTF |
| integer types for the bitfields - unsigned long long and signed long long. |
| |
| cts_offset is the offset of the bitfield into a machine word. |
| TBD - hardcoding cts_offset checks into the testcase will cause it to break |
| across targets with different BIT_PER_WORD. Is there a way to add |
| cts_offset related checks in the testcase? */ |
| |
| /* { dg-do compile ) */ |
| /* { dg-options "-O0 -gctf -dA" } */ |
| |
| /* { dg-final { scan-assembler-times "\[\t \]0x6\[\t \]+\[^\n\]*cts_type" 3 } } */ |
| /* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 3 } } */ |
| |
| /* { dg-final { scan-assembler-times "\[\t \]0xf\[\t \]+\[^\n\]*cts_bits" 2 } } */ |
| /* { dg-final { scan-assembler-times "\[\t \]0x21\[\t \]+\[^\n\]*cts_bits" 2 } } */ |
| /* { dg-final { scan-assembler-times "\[\t \]0x10\[\t \]+\[^\n\]*cts_bits" 2 } } */ |
| |
| /* { dg-final { scan-assembler-times "ascii \"long long unsigned int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ |
| /* { dg-final { scan-assembler-times "ascii \"long long int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ |
| |
| struct fields |
| { |
| unsigned long long u1 : 15; |
| unsigned long long u2 : 33; |
| unsigned long long u3 : 16; |
| signed long long s1 : 15; |
| signed long long s2 : 33; |
| signed long long s3 : 16; |
| } flags; |
| |
| int i = 33; |
| |
| int main () |
| { |
| return flags.u1 + i; |
| } |