blob: 142139a2e4114267253510a94112b62af6371f05 [file] [log] [blame]
# 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[^.]
*/