diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a8c3a2a2aab4..cb28809b5564 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-09-09 Jose E. Marchesi + + * doc/sourcebuild.texi (Effective-Target Keywords): Document + indirect_calls. + 2019-09-09 Jose E. Marchesi * opt-functions.awk (integer_range_info): Make sure values are in diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index d713c08f7625..e4180ccaabb7 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2374,6 +2374,10 @@ Target supports @code{wchar_t} that is compatible with @code{char32_t}. @item comdat_group Target uses comdat groups. + +@item indirect_calls +Target supports indirect calls, i.e. calls where the target is not +constant. @end table @subsubsection Local to tests in @code{gcc.target/i386} diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0a8c405e8aac..9533da6e8190 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,58 @@ +2019-09-09 Jose E. Marchesi + + * lib/target-supports.exp (check_effective_target_indirect_calls): + New proc. + * gcc.c-torture/compile/20010102-1.c: Annotate with + dg-require-effective-target indirect_calls. + * gcc.c-torture/compile/20010107-1.c: Likewise. + * gcc.c-torture/compile/20011109-1.c: Likewise. + * gcc.c-torture/compile/20011218-1.c: Likewise. + * gcc.c-torture/compile/20011229-1.c: Likewise. + * gcc.c-torture/compile/20020129-1.c: Likewise. + * gcc.c-torture/compile/20020320-1.c: Likewise. + * gcc.c-torture/compile/20020706-1.c: Likewise. + * gcc.c-torture/compile/20020706-2.c: Likewise. + * gcc.c-torture/compile/20021205-1.c: Likewise. + * gcc.c-torture/compile/20030921-1.c: Likewise. + * gcc.c-torture/compile/20031023-1.c: Likewise. + * gcc.c-torture/compile/20031023-2.c: Likewise. + * gcc.c-torture/compile/20031023-3.c: Likewise. + * gcc.c-torture/compile/20031023-4.c: Likewise. + * gcc.c-torture/compile/20040614-1.c: Likewise. + * gcc.c-torture/compile/20040909-1.c: Likewise. + * gcc.c-torture/compile/20050122-1.c: Likewise. + * gcc.c-torture/compile/20050202-1.c: Likewise. + * gcc.c-torture/compile/20060208-1.c: Likewise. + * gcc.c-torture/compile/20081108-1.c: Likewise. + * gcc.c-torture/compile/20150327.c: Likewise. + * gcc.c-torture/compile/920428-2.c: Likewise. + * gcc.c-torture/compile/920928-5.c: Likewise. + * gcc.c-torture/compile/930117-1.c: Likewise. + * gcc.c-torture/compile/930607-1.c: Likewise. + * gcc.c-torture/compile/991213-2.c: Likewise. + * gcc.c-torture/compile/callind.c: Likewise. + * gcc.c-torture/compile/calls-void.c: Likewise. + * gcc.c-torture/compile/calls.c: Likewise. + * gcc.c-torture/compile/pr21840.c: Likewise. + * gcc.c-torture/compile/pr32139.c: Likewise. + * gcc.c-torture/compile/pr35607.c: Likewise. + * gcc.c-torture/compile/pr37433-1.c: Likewise. + * gcc.c-torture/compile/pr37433.c: Likewise. + * gcc.c-torture/compile/pr39941.c: Likewise. + * gcc.c-torture/compile/pr40080.c: Likewise. + * gcc.c-torture/compile/pr43635.c: Likewise. + * gcc.c-torture/compile/pr43791.c: Likewise. + * gcc.c-torture/compile/pr43845.c: Likewise. + * gcc.c-torture/compile/pr44043.c: Likewise. + * gcc.c-torture/compile/pr51694.c: Likewise. + * gcc.c-torture/compile/pr77754-2.c: Likewise. + * gcc.c-torture/compile/pr77754-3.c: Likewise. + * gcc.c-torture/compile/pr77754-4.c: Likewise. + * gcc.c-torture/compile/pr89663-2.c: Likewise. + * gcc.c-torture/compile/pta-1.c: Likewise. + * gcc.c-torture/compile/stack-check-1.c: Likewise. + * gcc.dg/Walloc-size-larger-than-18.c: Likewise. + 2019-09-09 Jose E. Marchesi * gcc.c-torture/compile/20000609-1.c: Annotate with diff --git a/gcc/testsuite/gcc.c-torture/compile/20010102-1.c b/gcc/testsuite/gcc.c-torture/compile/20010102-1.c index a409b566098f..3d9cc9edf72a 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20010102-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20010102-1.c @@ -4,6 +4,8 @@ Copyright (C) 2001 Free Software Foundation. */ +/* { dg-require-effective-target indirect_calls } */ + # define PTR_INT_TYPE __PTRDIFF_TYPE__ struct _obstack_chunk diff --git a/gcc/testsuite/gcc.c-torture/compile/20010107-1.c b/gcc/testsuite/gcc.c-torture/compile/20010107-1.c index 222def4d9efa..22461a0521fd 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20010107-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20010107-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + unsigned long x[4]; void foo(void) diff --git a/gcc/testsuite/gcc.c-torture/compile/20011109-1.c b/gcc/testsuite/gcc.c-torture/compile/20011109-1.c index f1987a74bf28..1deba2a52df3 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20011109-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20011109-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef struct { short x[4]; } S; typedef struct { unsigned int a, b, c; S *d; } T; diff --git a/gcc/testsuite/gcc.c-torture/compile/20011218-1.c b/gcc/testsuite/gcc.c-torture/compile/20011218-1.c index bf63489b8558..8db5b777089d 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20011218-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20011218-1.c @@ -2,6 +2,8 @@ for the indirect call was exposed too early and reload couldn't allocate it for multiplication and division. */ +/* { dg-require-effective-target indirect_calls } */ + struct S { int a, b; void (*f) (long, int); diff --git a/gcc/testsuite/gcc.c-torture/compile/20011229-1.c b/gcc/testsuite/gcc.c-torture/compile/20011229-1.c index 97b2655434ad..99aeab7d7cd2 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20011229-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20011229-1.c @@ -1,5 +1,8 @@ /* ICE: call insn does not satisfy its constraints, MMIX port. Origin: ghostscript-6.52, reduction from hp@bitrange.com. */ + +/* { dg-require-effective-target indirect_calls } */ + struct s0 { void (*init_color)(void *, void *); diff --git a/gcc/testsuite/gcc.c-torture/compile/20020129-1.c b/gcc/testsuite/gcc.c-torture/compile/20020129-1.c index 7b17ba475e48..c14ac07655ed 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20020129-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20020129-1.c @@ -1,5 +1,7 @@ /* Test call to static variable. */ +/* { dg-require-effective-target indirect_calls } */ + typedef struct { long long a[10]; diff --git a/gcc/testsuite/gcc.c-torture/compile/20020320-1.c b/gcc/testsuite/gcc.c-torture/compile/20020320-1.c index 385c061e1932..5b7a17a30806 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20020320-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20020320-1.c @@ -2,6 +2,8 @@ This testcase caused infinite loop in flow (several places), because flow assumes gen_jump generates simple_jump_p. */ +/* { dg-require-effective-target indirect_calls } */ + typedef void (*T) (void); extern T x[]; diff --git a/gcc/testsuite/gcc.c-torture/compile/20020706-1.c b/gcc/testsuite/gcc.c-torture/compile/20020706-1.c index c8811bc68ff8..9bbfc8a66dd8 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20020706-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20020706-1.c @@ -1,6 +1,8 @@ // Contributed by Alexandre Oliva // From Red Hat case 106165. +/* { dg-require-effective-target indirect_calls } */ + typedef struct s1 { unsigned short v1; diff --git a/gcc/testsuite/gcc.c-torture/compile/20020706-2.c b/gcc/testsuite/gcc.c-torture/compile/20020706-2.c index b84dda60fd31..2391f2085e80 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20020706-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/20020706-2.c @@ -1,6 +1,8 @@ // Contributed by Alexandre Oliva // From Red Hat case 106165. +/* { dg-require-effective-target indirect_calls } */ + typedef unsigned short (FUNC_P) (void *, unsigned char *, unsigned short); void crashIt(int id, FUNC_P *func, unsigned char *funcparm) diff --git a/gcc/testsuite/gcc.c-torture/compile/20021205-1.c b/gcc/testsuite/gcc.c-torture/compile/20021205-1.c index 73648e949515..27f458751086 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20021205-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20021205-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef struct x x; extern void *baz(char *); struct x { char * (*bar) (int); }; diff --git a/gcc/testsuite/gcc.c-torture/compile/20030921-1.c b/gcc/testsuite/gcc.c-torture/compile/20030921-1.c index 8199dc657f24..4bb3f4645af1 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20030921-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20030921-1.c @@ -2,6 +2,7 @@ f is not being emitted. TREE_SYMBOL_REFERENCED was being set instead of calling mark_referenced. */ +/* { dg-require-effective-target indirect_calls } */ static void f(void); void g(void (*x) (void)){x();} diff --git a/gcc/testsuite/gcc.c-torture/compile/20031023-1.c b/gcc/testsuite/gcc.c-torture/compile/20031023-1.c index be837762e665..1ee1ff7aaa68 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20031023-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20031023-1.c @@ -1,5 +1,7 @@ /* Declaration of the frame size doesn't work on ptx. */ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ + #ifndef ASIZE # define ASIZE 0x10000000000UL #endif diff --git a/gcc/testsuite/gcc.c-torture/compile/20031023-2.c b/gcc/testsuite/gcc.c-torture/compile/20031023-2.c index 66d66458c85c..50965169adca 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20031023-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/20031023-2.c @@ -1,4 +1,6 @@ /* Declaration of the frame size doesn't work on ptx. */ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ + #define ASIZE 0x1000000000UL #include "20031023-1.c" diff --git a/gcc/testsuite/gcc.c-torture/compile/20031023-3.c b/gcc/testsuite/gcc.c-torture/compile/20031023-3.c index 5859634c3433..1bb692f45a98 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20031023-3.c +++ b/gcc/testsuite/gcc.c-torture/compile/20031023-3.c @@ -1,4 +1,6 @@ /* Declaration of the frame size doesn't work on ptx. */ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ + #define ASIZE 0x100000000UL #include "20031023-1.c" diff --git a/gcc/testsuite/gcc.c-torture/compile/20031023-4.c b/gcc/testsuite/gcc.c-torture/compile/20031023-4.c index 5c61f3743d4f..85c4dca9cb50 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20031023-4.c +++ b/gcc/testsuite/gcc.c-torture/compile/20031023-4.c @@ -1,2 +1,4 @@ +/* { dg-require-effective-target indirect_calls } */ + #define ASIZE 0x80000000UL #include "20031023-1.c" diff --git a/gcc/testsuite/gcc.c-torture/compile/20040614-1.c b/gcc/testsuite/gcc.c-torture/compile/20040614-1.c index b692ab569f27..c889bb251c8b 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20040614-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20040614-1.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target label_values } */ +/* { dg-require-effective-target indirect_calls } */ void f(int r1, int *fp) { diff --git a/gcc/testsuite/gcc.c-torture/compile/20040909-1.c b/gcc/testsuite/gcc.c-torture/compile/20040909-1.c index 8bbf90191b42..0f66cb261db1 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20040909-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20040909-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + static __inline__ int one_utf8_to_utf16 () { } diff --git a/gcc/testsuite/gcc.c-torture/compile/20050122-1.c b/gcc/testsuite/gcc.c-torture/compile/20050122-1.c index a70907d90514..7bb7cee5a325 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20050122-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20050122-1.c @@ -1,4 +1,6 @@ /* From PR 19484. */ +/* { dg-require-effective-target indirect_calls } */ + extern void foo (void) __attribute__((noreturn)); int n; diff --git a/gcc/testsuite/gcc.c-torture/compile/20050202-1.c b/gcc/testsuite/gcc.c-torture/compile/20050202-1.c index b3f817645383..58ed54eceb32 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20050202-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20050202-1.c @@ -1,4 +1,6 @@ /* From PR 19578. */ +/* { dg-require-effective-target indirect_calls } */ + extern void foo (void) __attribute__((noreturn)); void diff --git a/gcc/testsuite/gcc.c-torture/compile/20060208-1.c b/gcc/testsuite/gcc.c-torture/compile/20060208-1.c index 3881474f7228..5025463d7efa 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20060208-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20060208-1.c @@ -1,5 +1,7 @@ /* PR middle-end/26092 */ +/* { dg-require-effective-target indirect_calls } */ /* { dg-skip-if "can't take address of malloc" { nvptx-*-* } } */ + typedef __SIZE_TYPE__ size_t; extern void *malloc (size_t); diff --git a/gcc/testsuite/gcc.c-torture/compile/20081108-1.c b/gcc/testsuite/gcc.c-torture/compile/20081108-1.c index 3209a90c83bc..a1f54e8c5fe6 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20081108-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/20081108-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + /* Test function call with function designator involving VLA side-effects does not lead to an ICE. */ diff --git a/gcc/testsuite/gcc.c-torture/compile/20150327.c b/gcc/testsuite/gcc.c-torture/compile/20150327.c index 373ea6183c3c..125b722a6eba 100644 --- a/gcc/testsuite/gcc.c-torture/compile/20150327.c +++ b/gcc/testsuite/gcc.c-torture/compile/20150327.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + int a; int (*b)(), (*c)(); int fn1(int p1) { diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-2.c b/gcc/testsuite/gcc.c-torture/compile/920428-2.c index f313b32986ba..817fff061e9b 100644 --- a/gcc/testsuite/gcc.c-torture/compile/920428-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/920428-2.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + double sin(double x); double cos(double x); double tan(double x); diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-5.c b/gcc/testsuite/gcc.c-torture/compile/920928-5.c index 8c975f0c0516..b9f9dcbaeb06 100644 --- a/gcc/testsuite/gcc.c-torture/compile/920928-5.c +++ b/gcc/testsuite/gcc.c-torture/compile/920928-5.c @@ -1,4 +1,7 @@ /* REPRODUCED:CC1:SIGNAL MACHINE:m68k OPTIONS:-fpcc-struct-return */ + +/* { dg-require-effective-target indirect_calls } */ + struct b{}; f(struct b(*f)()) { diff --git a/gcc/testsuite/gcc.c-torture/compile/930117-1.c b/gcc/testsuite/gcc.c-torture/compile/930117-1.c index 83317cdd07bc..06466f5e5871 100644 --- a/gcc/testsuite/gcc.c-torture/compile/930117-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/930117-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + f(x) { (*(void (*)())&x)(); diff --git a/gcc/testsuite/gcc.c-torture/compile/930607-1.c b/gcc/testsuite/gcc.c-torture/compile/930607-1.c index 97c94b25ec3b..360bbbc15083 100644 --- a/gcc/testsuite/gcc.c-torture/compile/930607-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/930607-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef void f (); typedef f *pf; long long i; diff --git a/gcc/testsuite/gcc.c-torture/compile/991213-2.c b/gcc/testsuite/gcc.c-torture/compile/991213-2.c index 98385d562632..dfbedf7d6741 100644 --- a/gcc/testsuite/gcc.c-torture/compile/991213-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/991213-2.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef long __kernel_time_t; typedef __kernel_time_t time_t; time2( diff --git a/gcc/testsuite/gcc.c-torture/compile/callind.c b/gcc/testsuite/gcc.c-torture/compile/callind.c index 5938d1b88fcf..893f4e764acb 100644 --- a/gcc/testsuite/gcc.c-torture/compile/callind.c +++ b/gcc/testsuite/gcc.c-torture/compile/callind.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + bar (foo, a) int (**foo) (); { diff --git a/gcc/testsuite/gcc.c-torture/compile/calls-void.c b/gcc/testsuite/gcc.c-torture/compile/calls-void.c index eeed4fdfdc1d..7e6f56c16fb9 100644 --- a/gcc/testsuite/gcc.c-torture/compile/calls-void.c +++ b/gcc/testsuite/gcc.c-torture/compile/calls-void.c @@ -1,5 +1,6 @@ /* { dg-require-effective-target ptr32plus } */ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ typedef void (*T)(void); f1 () diff --git a/gcc/testsuite/gcc.c-torture/compile/calls.c b/gcc/testsuite/gcc.c-torture/compile/calls.c index ca07122a786a..48a3b7c77a53 100644 --- a/gcc/testsuite/gcc.c-torture/compile/calls.c +++ b/gcc/testsuite/gcc.c-torture/compile/calls.c @@ -1,5 +1,6 @@ /* { dg-require-effective-target ptr32plus } */ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ typedef void *(*T)(void); f1 () diff --git a/gcc/testsuite/gcc.c-torture/compile/pr21840.c b/gcc/testsuite/gcc.c-torture/compile/pr21840.c index bec3d6bf5d7e..f6f2a5dc1333 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr21840.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr21840.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + void fn_show_state(void); typedef void (*fn_handler_fn)(void); static fn_handler_fn fn_handler[1]; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32139.c b/gcc/testsuite/gcc.c-torture/compile/pr32139.c index 7b8522f51749..3cc541cb328f 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr32139.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr32139.c @@ -1,4 +1,6 @@ /* PR tree-optimization/32139 */ +/* { dg-require-effective-target indirect_calls } */ + int foo (void); int bar (void) __attribute__ ((const)); diff --git a/gcc/testsuite/gcc.c-torture/compile/pr35607.c b/gcc/testsuite/gcc.c-torture/compile/pr35607.c index 7f5aa7a2b7c2..9debd46df583 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr35607.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr35607.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + extern void (*__fini_array_start []) (void); extern void (*__fini_array_end []) (void); void diff --git a/gcc/testsuite/gcc.c-torture/compile/pr37433-1.c b/gcc/testsuite/gcc.c-torture/compile/pr37433-1.c index 322c167d6826..48a57b637d7e 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr37433-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr37433-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + void regex_subst(void) { const void *subst = ""; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr37433.c b/gcc/testsuite/gcc.c-torture/compile/pr37433.c index 0ba1179886cd..95d168afa2f3 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr37433.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr37433.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + int regex_subst(void) { const void *subst = ""; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr39941.c b/gcc/testsuite/gcc.c-torture/compile/pr39941.c index b6209086be92..5cb3b0554ee4 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr39941.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr39941.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef void (*entry_func) (void) __attribute__ ((noreturn)); extern entry_func entry_addr; static void bsd_boot_entry (void) diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40080.c b/gcc/testsuite/gcc.c-torture/compile/pr40080.c index e36f14273e87..37c5a918ad4f 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr40080.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr40080.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + extern void *ff(void*,int); struct lpgl { struct lpgl *next; }; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43635.c b/gcc/testsuite/gcc.c-torture/compile/pr43635.c index df826b6f4c0f..3875f4efcd46 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr43635.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr43635.c @@ -1,4 +1,6 @@ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ + extern void d (void); void (*foo (void)) (float) diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43791.c b/gcc/testsuite/gcc.c-torture/compile/pr43791.c index 2b1d06ff7891..710bf7e9ec9d 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr43791.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr43791.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + int owner(); int clear(); diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43845.c b/gcc/testsuite/gcc.c-torture/compile/pr43845.c index bdb45e7d2a8b..83442decd1cd 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr43845.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr43845.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef int __attribute__ ((const)) (*x264_pixel_cmp_t)(void); typedef struct { diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44043.c b/gcc/testsuite/gcc.c-torture/compile/pr44043.c index 943501b40915..bd51089a70ae 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr44043.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr44043.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef unsigned char __u8; typedef unsigned short __u16; typedef unsigned int __u32; diff --git a/gcc/testsuite/gcc.c-torture/compile/pr51694.c b/gcc/testsuite/gcc.c-torture/compile/pr51694.c index f5c1a40df861..c06bc2118aad 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr51694.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr51694.c @@ -1,4 +1,6 @@ /* { dg-require-effective-target untyped_assembly } */ +/* { dg-require-effective-target indirect_calls } */ + void foo (x, fn) void (*fn) (); diff --git a/gcc/testsuite/gcc.c-torture/compile/pr77754-2.c b/gcc/testsuite/gcc.c-torture/compile/pr77754-2.c index d088961963de..d649d7197222 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr77754-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr77754-2.c @@ -1,4 +1,5 @@ // { dg-require-effective-target alloca } +// { dg-require-effective-target indirect_calls } /* PR c/77754 */ int fn3(); diff --git a/gcc/testsuite/gcc.c-torture/compile/pr77754-3.c b/gcc/testsuite/gcc.c-torture/compile/pr77754-3.c index fb25e234fe23..51d7ca71966c 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr77754-3.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr77754-3.c @@ -1,4 +1,5 @@ // { dg-require-effective-target alloca } +// { dg-require-effective-target indirect_calls } /* PR c/77754 */ int fn3(); diff --git a/gcc/testsuite/gcc.c-torture/compile/pr77754-4.c b/gcc/testsuite/gcc.c-torture/compile/pr77754-4.c index 1c5c4619a33f..53216bb6e7c2 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr77754-4.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr77754-4.c @@ -1,4 +1,5 @@ // { dg-require-effective-target alloca } +// { dg-require-effective-target indirect_calls } /* PR c/77754 */ int fn3(); diff --git a/gcc/testsuite/gcc.c-torture/compile/pr89663-2.c b/gcc/testsuite/gcc.c-torture/compile/pr89663-2.c index 052fe69f40ec..efac68233f63 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr89663-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr89663-2.c @@ -1,4 +1,5 @@ /* PR middle-end/89663 */ +/* { dg-require-effective-target indirect_calls } */ int irint (double); long lrint (double); diff --git a/gcc/testsuite/gcc.c-torture/compile/pta-1.c b/gcc/testsuite/gcc.c-torture/compile/pta-1.c index 515e5ff13f43..07dad8a16a78 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pta-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/pta-1.c @@ -1,3 +1,5 @@ +/* { dg-require-effective-target indirect_calls } */ + typedef struct JSObject JSObject; typedef struct JSObjectMap *(*JSNewObjectMapOp) (JSObject *obj); typedef JSObject *(*JSGetMethodOp) (JSObject *obj); diff --git a/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c b/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c index 2a03f7c29ae3..c06f5a19b017 100644 --- a/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/stack-check-1.c @@ -1,3 +1,4 @@ +/* { dg-require-effective-target indirect_calls } */ /* { dg-require-effective-target untyped_assembly } */ /* { dg-require-stack-check "" } */ /* { dg-additional-options "-fstack-check" } */ diff --git a/gcc/testsuite/gcc.dg/Walloc-size-larger-than-18.c b/gcc/testsuite/gcc.dg/Walloc-size-larger-than-18.c index b4aa167f655e..7888cb1b1dac 100644 --- a/gcc/testsuite/gcc.dg/Walloc-size-larger-than-18.c +++ b/gcc/testsuite/gcc.dg/Walloc-size-larger-than-18.c @@ -4,6 +4,7 @@ with zero or excessive size trigger either -Walloc-zero or -Walloc-size-larger-than warnings. { dg-do compile } + { dg-require-effective-target indirect_calls } { dg-options "-O2 -Wall -Walloc-zero -ftrack-macro-expansion=0" } */ #define ATTR(...) __attribute__ ((__VA_ARGS__)) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index e32d42491d96..4d03cc0718bc 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -9502,3 +9502,11 @@ proc check_effective_target_mfentry { } { void foo (void) { } } "-mfentry"] } + +# Return 1 if this target supports indirect calls +proc check_effective_target_indirect_calls { } { + if { [istarget bpf-*-*] } { + return 0 + } + return 1 +}