async-unwind1.c

来自「用于进行gcc测试」· C语言 代码 · 共 62 行

C
62
字号
// PR rtl-optimization/36419// { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } }// { dg-options "-Os -fasynchronous-unwind-tables -mpreferred-stack-boundary=4" }extern "C" void abort ();int v = -1;unsigned int n;__attribute__((noinline, used))void foo (int a, int){  if (v < 0)    v = ((unsigned long) &a) & 15;  else if ((((unsigned long) &a) & 15) != v)    abort ();  if (n++ == 0)    throw 1;}__attribute__((noinline, used))void baz (int a, int, int, int, int, int, int){  if (v < 0)    v = ((unsigned long) &a) & 15;  else if ((((unsigned long) &a) & 15) != v)    abort ();  if (n++ == 0)    throw 1;}struct A { A () { }; ~A (); char c[24]; };__attribute__((noinline))A::~A (){  asm volatile ("" : : : "memory");}__attribute__((noinline))void bar (){  A a;  try    {      foo (1, 2);      baz (3, 4, 5, 6, 7, 8, 9);    }  catch (...)    {    }  foo (1, 2);  baz (3, 4, 5, 6, 7, 8, 9);}intmain (){  bar ();  return 0;}

⌨️ 快捷键说明

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