1 # define __force        __attribute__((force))
   2 
   3 struct s {
   4         int a;
   5 };
   6 
   7 static int foo(struct s *s)
   8 {
   9         return (*((typeof(s->a) __force *) &s->a)) & 1;
  10 }
  11 
  12 static void bar(struct s *d, struct s *s1, struct s *s2)
  13 {
  14         *d = *s1, *d = *s2;
  15 }
  16 
  17 /*
  18  * check-name: unexamined base type
  19  * check-command: test-linearize -Wno-decl $file
  20  * check-description:
  21  *      Test case for missing examine in evaluate_dereference()'s
  22  *      target base type. In this case, the loaded value has a
  23  *      a null size, giving the wrongly generated code for foo():
  24  *              ptrcast.64  %r3 <- (64) %arg1
  25  *              load        %r4 <- 0[%r3]
  26  *                  ^^^                         !! WRONG !!
  27  *              cast.32     %r5 <- (0) %r4
  28  *                                 ^^^          !! WRONG !!
  29  *              and.32      %r6 <- %r5, $1
  30  *              ret.32      %r6
  31  *
  32  * check-output-ignore
  33  * check-output-excludes: load[^.]
  34  * check-output-excludes: cast\\..*(0)
  35  * check-output-excludes: store[^.]
  36  */