@item trampolines
Target supports trampolines.
+@item variadic_mi_thunk
+Target supports C++ virtual variadic function calls with multiple inheritance.
+
@item two_plus_gigs
Target supports linking programs with 2+GiB of data.
// PR ipa/83549
// { dg-do compile }
+// { dg-require-effective-target variadic_mi_thunk }
// { dg-options "-O2" }
struct A { virtual ~A (); };
// { dg-require-alias "" }
// { dg-options "-fdump-ipa-inline" }
// c++/83667 ICE dumping a static thunk when TARGET_USE_LOCAL_THUNK_ALIAS_P
+// { dg-require-effective-target variadic_mi_thunk }
struct a
// { dg-xfail-if "PR108277" { arm_thumb1 } }
+// { dg-require-effective-target variadic_mi_thunk }
struct Error {
virtual void error(... ) const;
// { dg-do run }
-// { dg-skip-if "fails with generic thunk support" { rs6000-*-* powerpc-*-eabi v850-*-* sh-*-* h8*-*-* xtensa*-*-* m32r*-*-* lm32-*-* } }
+// { dg-skip-if "fails with generic thunk support" { rs6000-*-* powerpc-*-eabi sh-*-* xtensa*-*-* } }
+// { dg-require-effective-target variadic_mi_thunk }
// Test that variadic function calls using thunks work right.
// Note that this will break on any target that uses the generic thunk
// support, because it doesn't support variadic functions.
return 1
}
+# Return 1 if target supports calling virtual variadic methods
+# of multi-inheritance classes.
+
+proc check_effective_target_variadic_mi_thunk { } {
+ # These targets do not implement TARGET_ASM_OUTPUT_MI_THUNK.
+ if { [istarget avr-*-*]
+ || [istarget bpf-*-*]
+ || [istarget fr30-*-*]
+ || [istarget ft32-*-*]
+ || [istarget amdgcn-*-*]
+ || [istarget h8300-*-*]
+ || [istarget iq2000-*-*]
+ || [istarget lm32-*-*]
+ || [istarget m32c-*-*]
+ || [istarget m32r-*-*]
+ || [istarget mcore-*-*]
+ || [istarget moxie-*-*]
+ || [istarget msp430-*-*]
+ || [istarget nvptx-*-*]
+ || [istarget pdp11-*-*]
+ || [istarget pru-*-*]
+ || [istarget rl78-*-*]
+ || [istarget rx-*-*]
+ || [istarget v850-*-*]
+ || [istarget visium-*-*] } {
+
+ return 0;
+ }
+ return 1
+}
+
# Return 1 if target has limited stack size.
proc check_effective_target_stack_size { } {