blob: f96c4ef5a534a271b733cfcc994723d784c1268a [file] [log] [blame]
/* { dg-require-effective-target int32plus } */
#include <stdio.h>
typedef struct { int x; int y;} S;
extern int foo(S*);
int hi = 0, lo = 0;
int main()
{
S a;
int r;
a.x = (int) 0x00010000;
a.y = 1;
r = foo (&a);
if (r == 2 && lo==0 && hi==1)
{
exit (0);
}
abort ();
}
typedef unsigned short u16;
__attribute__ ((noinline)) int foo (S* ptr)
{
int a = ptr->x;
int c = 0;
u16 b = (u16) a;
if (b != 0)
{
lo = 1;
c += ptr->y;
}
b = a >> 16;
if (b != 0)
{
hi = 1;
c+= ptr->y;
}
c += ptr->y;
return c;
}