Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/plugin/must-tail-call-2.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* Allow nested functions. */ /* { dg-options "-Wno-pedantic" } */ struct box { char field[64]; int i; }; struct box __attribute__((noinline,noclone)) returns_struct (int i) { struct box b; b.i = i * i; return b; } int __attribute__((noinline,noclone)) test_1 (int i) { return returns_struct (i * 5).i; /* { dg-error "cannot tail-call: " } */ } int __attribute__((noinline,noclone)) test_2_callee (int i, struct box b) { if (b.field[0]) return 5; return i * i; } int __attribute__((noinline,noclone)) test_2_caller (int i) { struct box b; return test_2_callee (i + 1, b); /* { dg-error "cannot tail-call: " } */ } extern void setjmp (void); void test_3 (void) { setjmp (); /* { dg-error "cannot tail-call: " } */ } void test_4 (void) { void nested (void) { } nested (); /* { dg-error "cannot tail-call: " } */ } typedef void (fn_ptr_t) (void); volatile fn_ptr_t fn_ptr; void test_5 (void) { fn_ptr (); /* { dg-error "cannot tail-call: " } */ }