| # define __force __attribute__((force)) |
| |
| struct s { |
| int a; |
| }; |
| |
| static int foo(struct s *s) |
| { |
| return (*((typeof(s->a) __force *) &s->a)) & 1; |
| } |
| |
| static void bar(struct s *d, struct s *s1, struct s *s2) |
| { |
| *d = *s1, *d = *s2; |
| } |
| |
| /* |
| * check-name: unexamined base type |
| * check-command: test-linearize -Wno-decl $file |
| * check-description: |
| * Test case for missing examine in evaluate_dereference()'s |
| * target base type. In this case, the loaded value has a |
| * a null size, giving the wrongly generated code for foo(): |
| * ptrcast.64 %r3 <- (64) %arg1 |
| * load %r4 <- 0[%r3] |
| * ^^^ !! WRONG !! |
| * cast.32 %r5 <- (0) %r4 |
| * ^^^ !! WRONG !! |
| * and.32 %r6 <- %r5, $1 |
| * ret.32 %r6 |
| * |
| * check-output-ignore |
| * check-output-excludes: load[^.] |
| * check-output-excludes: cast\\..*(0) |
| * check-output-excludes: store[^.] |
| */ |