vrp14.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 47 行

C
47
字号
/* { dg-do run } *//* { dg-options "-O2" } */struct tree_decl{  union tree_decl_u1 {    int f;    long i;    struct tree_decl_u1_a {      unsigned int align : 24;      unsigned int off_align : 8;    } a;  } u1;};extern void abort (void);unsigned intassemble_variable (struct tree_decl decl){  unsigned int align;  align = decl.u1.a.align;  if (align > (1 << ((8 * 4) < 64 ? (8 * 4) - 2 : 62)))    align = (1 << ((8 * 4) < 64 ? (8 * 4) - 2 : 62));  /* VRP should not be propagating 0 to the RHS of this assignment.     But it was erroneously applying a cast operation between types of     different precision.  align is an unsigned int with range [0,     0x4000000] but the .align field holds only 24 bits.  So the cast     was returning a [0, 0] range.  */  decl.u1.a.align = align;  return decl.u1.a.align;}main (){  struct tree_decl decl;  decl.u1.a.align = 13;  unsigned int x = assemble_variable (decl);  if (x == 0)    abort ();  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?