diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 1204a54..6536a7c 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2228,6 +2228,9 @@ Target uses @code{__cxa_atexit}. @item default_packed Target has packed layout of structure members by default. +@item exceptions +Target supports exceptions. + @item fgraphite Target supports Graphite optimizations. diff --git a/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c b/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c index 2a90ab1..8af9365 100644 --- a/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c +++ b/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c @@ -1,5 +1,6 @@ /* PR c/71512 */ /* { dg-do compile } */ /* { dg-options "-O2 -fnon-call-exceptions -ftrapv -fexceptions -fsanitize=undefined" } */ +/* { dg-require-effective-target exceptions } */ #include "../../gcc.dg/pr44545.c" diff --git a/gcc/testsuite/c-c++-common/ubsan/pr71512-2.c b/gcc/testsuite/c-c++-common/ubsan/pr71512-2.c index 1c95593..0c16934 100644 --- a/gcc/testsuite/c-c++-common/ubsan/pr71512-2.c +++ b/gcc/testsuite/c-c++-common/ubsan/pr71512-2.c @@ -1,5 +1,6 @@ /* PR c/71512 */ /* { dg-do compile } */ /* { dg-options "-O -fexceptions -fnon-call-exceptions -ftrapv -fsanitize=undefined" } */ +/* { dg-require-effective-target exceptions } */ #include "../../gcc.dg/pr47086.c" diff --git a/gcc/testsuite/gcc.c-torture/compile/pr34648.c b/gcc/testsuite/gcc.c-torture/compile/pr34648.c index 8bcdae0..90a88b9 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr34648.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr34648.c @@ -1,6 +1,7 @@ /* PR tree-optimization/34648 */ /* { dg-options "-fexceptions" } */ +/* { dg-require-effective-target exceptions } */ extern const unsigned short int **bar (void) __attribute__ ((const)); const char *a; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr41469.c b/gcc/testsuite/gcc.c-torture/compile/pr41469.c index 5917794..923bca2 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr41469.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr41469.c @@ -1,5 +1,6 @@ /* { dg-options "-fexceptions" } */ /* { dg-skip-if "requires alloca" { ! alloca } { "-O0" } { "" } } */ +/* { dg-require-effective-target exceptions } */ void af (void *a) diff --git a/gcc/testsuite/gcc.dg/20111216-1.c b/gcc/testsuite/gcc.dg/20111216-1.c index cd82cf9..7f9395e 100644 --- a/gcc/testsuite/gcc.dg/20111216-1.c +++ b/gcc/testsuite/gcc.dg/20111216-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O -fexceptions -fnon-call-exceptions" } */ +/* { dg-require-effective-target exceptions } */ extern void f2 () __attribute__ ((noreturn)); void diff --git a/gcc/testsuite/gcc.dg/cleanup-10.c b/gcc/testsuite/gcc.dg/cleanup-10.c index 16035b1..1af63ea 100644 --- a/gcc/testsuite/gcc.dg/cleanup-10.c +++ b/gcc/testsuite/gcc.dg/cleanup-10.c @@ -1,5 +1,6 @@ /* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */ /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */ +/* { dg-require-effective-target exceptions } */ /* Verify that cleanups work with exception handling through signal frames on alternate stack. */ diff --git a/gcc/testsuite/gcc.dg/cleanup-11.c b/gcc/testsuite/gcc.dg/cleanup-11.c index ccc61ed..c1f19fe 100644 --- a/gcc/testsuite/gcc.dg/cleanup-11.c +++ b/gcc/testsuite/gcc.dg/cleanup-11.c @@ -1,5 +1,6 @@ /* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */ /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */ +/* { dg-require-effective-target exceptions } */ /* Verify that cleanups work with exception handling through realtime signal frames on alternate stack. */ diff --git a/gcc/testsuite/gcc.dg/cleanup-12.c b/gcc/testsuite/gcc.dg/cleanup-12.c index efb9a58..2171e35 100644 --- a/gcc/testsuite/gcc.dg/cleanup-12.c +++ b/gcc/testsuite/gcc.dg/cleanup-12.c @@ -4,6 +4,7 @@ /* { dg-options "-O2 -fexceptions" } */ /* { dg-skip-if "" { "ia64-*-hpux11.*" } } */ /* { dg-skip-if "" { ! nonlocal_goto } } */ +/* { dg-require-effective-target exceptions } */ /* Verify unwind info in presence of alloca. */ #include diff --git a/gcc/testsuite/gcc.dg/cleanup-13.c b/gcc/testsuite/gcc.dg/cleanup-13.c index 8a8db27..1b7ea5c 100644 --- a/gcc/testsuite/gcc.dg/cleanup-13.c +++ b/gcc/testsuite/gcc.dg/cleanup-13.c @@ -3,6 +3,7 @@ /* { dg-options "-fexceptions" } */ /* { dg-skip-if "" { "ia64-*-hpux11.*" } } */ /* { dg-skip-if "" { ! nonlocal_goto } } */ +/* { dg-require-effective-target exceptions } */ /* Verify DW_OP_* handling in the unwinder. */ #include diff --git a/gcc/testsuite/gcc.dg/cleanup-5.c b/gcc/testsuite/gcc.dg/cleanup-5.c index 4257f9e..9ed2a7c 100644 --- a/gcc/testsuite/gcc.dg/cleanup-5.c +++ b/gcc/testsuite/gcc.dg/cleanup-5.c @@ -3,6 +3,7 @@ /* { dg-options "-fexceptions" } */ /* { dg-skip-if "" { "ia64-*-hpux11.*" } } */ /* { dg-skip-if "" { ! nonlocal_goto } } */ +/* { dg-require-effective-target exceptions } */ /* Verify that cleanups work with exception handling. */ #include diff --git a/gcc/testsuite/gcc.dg/cleanup-8.c b/gcc/testsuite/gcc.dg/cleanup-8.c index 553c038..45abdb2 100644 --- a/gcc/testsuite/gcc.dg/cleanup-8.c +++ b/gcc/testsuite/gcc.dg/cleanup-8.c @@ -1,5 +1,6 @@ /* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */ /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */ +/* { dg-require-effective-target exceptions } */ /* Verify that cleanups work with exception handling through signal frames. */ diff --git a/gcc/testsuite/gcc.dg/cleanup-9.c b/gcc/testsuite/gcc.dg/cleanup-9.c index fe28072..98dc268 100644 --- a/gcc/testsuite/gcc.dg/cleanup-9.c +++ b/gcc/testsuite/gcc.dg/cleanup-9.c @@ -1,5 +1,6 @@ /* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */ /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */ +/* { dg-require-effective-target exceptions } */ /* Verify that cleanups work with exception handling through realtime signal frames. */ diff --git a/gcc/testsuite/gcc.dg/gomp/pr29955.c b/gcc/testsuite/gcc.dg/gomp/pr29955.c index e49c11c..102898c 100644 --- a/gcc/testsuite/gcc.dg/gomp/pr29955.c +++ b/gcc/testsuite/gcc.dg/gomp/pr29955.c @@ -1,6 +1,7 @@ /* PR c/29955 */ /* { dg-do compile } */ /* { dg-options "-O2 -fopenmp -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ extern void bar (int); diff --git a/gcc/testsuite/gcc.dg/lto/pr52097_0.c b/gcc/testsuite/gcc.dg/lto/pr52097_0.c index cd4af5d..1b3fda3 100644 --- a/gcc/testsuite/gcc.dg/lto/pr52097_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr52097_0.c @@ -1,5 +1,6 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -O -flto -fexceptions -fnon-call-exceptions --param allow-store-data-races=0 } } } */ +/* { dg-require-effective-target exceptions } */ typedef struct { unsigned int e0 : 16; } s1; typedef struct { unsigned int e0 : 16; } s2; diff --git a/gcc/testsuite/gcc.dg/nested-func-5.c b/gcc/testsuite/gcc.dg/nested-func-5.c index 3545f37..591f8a2 100644 --- a/gcc/testsuite/gcc.dg/nested-func-5.c +++ b/gcc/testsuite/gcc.dg/nested-func-5.c @@ -2,6 +2,7 @@ /* { dg-options "-fexceptions" } */ /* PR28516: ICE generating ARM unwind directives for nested functions. */ /* { dg-require-effective-target trampolines } */ +/* { dg-require-effective-target exceptions } */ void ex(int (*)(void)); void foo(int i) diff --git a/gcc/testsuite/gcc.dg/pch/except-1.c b/gcc/testsuite/gcc.dg/pch/except-1.c index f81b098..30350ed 100644 --- a/gcc/testsuite/gcc.dg/pch/except-1.c +++ b/gcc/testsuite/gcc.dg/pch/except-1.c @@ -1,4 +1,5 @@ /* { dg-options "-fexceptions -I." } */ +/* { dg-require-effective-target exceptions } */ #include "except-1.h" int main(void) diff --git a/gcc/testsuite/gcc.dg/pch/valid-2.c b/gcc/testsuite/gcc.dg/pch/valid-2.c index 3d8cb14..15a57c9 100644 --- a/gcc/testsuite/gcc.dg/pch/valid-2.c +++ b/gcc/testsuite/gcc.dg/pch/valid-2.c @@ -1,5 +1,5 @@ /* { dg-options "-I. -Winvalid-pch -fexceptions" } */ - +/* { dg-require-effective-target exceptions } */ #include "valid-2.h" /* { dg-warning "settings for -fexceptions do not match" } */ /* { dg-error "No such file" "no such file" { target *-*-* } 0 } */ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.dg/pr41470.c b/gcc/testsuite/gcc.dg/pr41470.c index 7ef0086..7374fac 100644 --- a/gcc/testsuite/gcc.dg/pr41470.c +++ b/gcc/testsuite/gcc.dg/pr41470.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-fexceptions" } */ /* { dg-require-effective-target alloca } */ +/* { dg-require-effective-target exceptions } */ void cf (void *); diff --git a/gcc/testsuite/gcc.dg/pr42427.c b/gcc/testsuite/gcc.dg/pr42427.c index cb43dd2..cb290fe 100644 --- a/gcc/testsuite/gcc.dg/pr42427.c +++ b/gcc/testsuite/gcc.dg/pr42427.c @@ -2,6 +2,7 @@ /* { dg-options "-O2 -fexceptions -fnon-call-exceptions -fpeel-loops" } */ /* { dg-add-options c99_runtime } */ /* { dg-require-effective-target ilp32 } */ +/* { dg-require-effective-target exceptions } */ #include diff --git a/gcc/testsuite/gcc.dg/pr44545.c b/gcc/testsuite/gcc.dg/pr44545.c index 8058261..37f75f1 100644 --- a/gcc/testsuite/gcc.dg/pr44545.c +++ b/gcc/testsuite/gcc.dg/pr44545.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fnon-call-exceptions -ftrapv -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ void DrawChunk(int *tabSize, int x) { diff --git a/gcc/testsuite/gcc.dg/pr47086.c b/gcc/testsuite/gcc.dg/pr47086.c index 71743fe..473e802 100644 --- a/gcc/testsuite/gcc.dg/pr47086.c +++ b/gcc/testsuite/gcc.dg/pr47086.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O -fexceptions -fnon-call-exceptions -ftrapv" } */ +/* { dg-require-effective-target exceptions } */ void foo () diff --git a/gcc/testsuite/gcc.dg/pr51481.c b/gcc/testsuite/gcc.dg/pr51481.c index d883d47..a35f8f3 100644 --- a/gcc/testsuite/gcc.dg/pr51481.c +++ b/gcc/testsuite/gcc.dg/pr51481.c @@ -1,6 +1,7 @@ /* PR tree-optimization/51481 */ /* { dg-do compile } */ /* { dg-options "-O -fexceptions -fipa-cp -fipa-cp-clone" } */ +/* { dg-require-effective-target exceptions } */ extern const unsigned short int **foo (void) __attribute__ ((__nothrow__, __const__)); diff --git a/gcc/testsuite/gcc.dg/pr51644.c b/gcc/testsuite/gcc.dg/pr51644.c index 2038a0c..e23c02f 100644 --- a/gcc/testsuite/gcc.dg/pr51644.c +++ b/gcc/testsuite/gcc.dg/pr51644.c @@ -1,6 +1,7 @@ /* PR middle-end/51644 */ /* { dg-do compile } */ /* { dg-options "-Wall -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ #include diff --git a/gcc/testsuite/gcc.dg/pr52046.c b/gcc/testsuite/gcc.dg/pr52046.c index e72061f..f0873e2 100644 --- a/gcc/testsuite/gcc.dg/pr52046.c +++ b/gcc/testsuite/gcc.dg/pr52046.c @@ -1,6 +1,7 @@ /* PR tree-optimization/52046 */ /* { dg-do compile } */ /* { dg-options "-O3 -fexceptions -fnon-call-exceptions" } */ +/* { dg-require-effective-target exceptions } */ extern float a[], b[], c[], d[]; extern int k[]; diff --git a/gcc/testsuite/gcc.dg/pr54669.c b/gcc/testsuite/gcc.dg/pr54669.c index b68c047..48967ed 100644 --- a/gcc/testsuite/gcc.dg/pr54669.c +++ b/gcc/testsuite/gcc.dg/pr54669.c @@ -3,6 +3,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fexceptions -fnon-call-exceptions" } */ +/* { dg-require-effective-target exceptions } */ int a[10]; diff --git a/gcc/testsuite/gcc.dg/pr56424.c b/gcc/testsuite/gcc.dg/pr56424.c index a724c64..7f28f04 100644 --- a/gcc/testsuite/gcc.dg/pr56424.c +++ b/gcc/testsuite/gcc.dg/pr56424.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fexceptions -fnon-call-exceptions" } */ +/* { dg-require-effective-target exceptions } */ extern long double cosl (long double); extern long double sinl (long double); diff --git a/gcc/testsuite/gcc.dg/pr64465.c b/gcc/testsuite/gcc.dg/pr64465.c index acfa952..d1d1749 100644 --- a/gcc/testsuite/gcc.dg/pr64465.c +++ b/gcc/testsuite/gcc.dg/pr64465.c @@ -1,6 +1,7 @@ /* PR tree-optimization/64465 */ /* { dg-do compile } */ /* { dg-options "-O2 -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ extern int foo (int *); extern int bar (int, int); diff --git a/gcc/testsuite/gcc.dg/pr65802.c b/gcc/testsuite/gcc.dg/pr65802.c index fcec234..0721ca8 100644 --- a/gcc/testsuite/gcc.dg/pr65802.c +++ b/gcc/testsuite/gcc.dg/pr65802.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O0 -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ #include diff --git a/gcc/testsuite/gcc.dg/pr67563.c b/gcc/testsuite/gcc.dg/pr67563.c index 34a78a2..5a727b8 100644 --- a/gcc/testsuite/gcc.dg/pr67563.c +++ b/gcc/testsuite/gcc.dg/pr67563.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ static void emit_package (int p1) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr41469-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr41469-1.c index 6be7cd9..eb8e1f2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr41469-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr41469-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fexceptions -fdump-tree-optimized" } */ +/* { dg-require-effective-target exceptions } */ void af (void *a); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-28.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-28.c index d35377b..d3a1bbc 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-28.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-28.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-dse-details -fexceptions -fnon-call-exceptions -fno-isolate-erroneous-paths-dereference" } */ +/* { dg-require-effective-target exceptions } */ int foo (int *p, int b) diff --git a/gcc/testsuite/gcc.dg/vect/pr46663.c b/gcc/testsuite/gcc.dg/vect/pr46663.c index 457ceae..c2e56bb 100644 --- a/gcc/testsuite/gcc.dg/vect/pr46663.c +++ b/gcc/testsuite/gcc.dg/vect/pr46663.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-additional-options "-O -fexceptions" } */ +/* { dg-require-effective-target exceptions } */ typedef __attribute__ ((const)) int (*bart) (void); diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 5026c59..15e33eb 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -8473,6 +8473,16 @@ proc check_effective_target_fenv_exceptions {} { } [add_options_for_ieee "-std=gnu99"]] } +# Return 1 if -fexceptions is supported. + +proc check_effective_target_exceptions {} { + if { [istarget amdgcn*-*-*] } { + return 0 + } + return 1 +} + + proc check_effective_target_tiny {} { return [check_cached_effective_target tiny { if { [istarget aarch64*-*-*]