Viewing file: attr-copy.C (1.77 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR middle-end/88546 - Copy attribute unusable for weakrefs { dg-do compile } { dg-options "-O1 -Wall -fdump-tree-optimized" } { dg-require-weak "" } */
#define ATTR(...) __attribute__ ((__VA_ARGS__)) #define ASRT(expr) _Static_assert (expr, #expr)
extern "C" {
ATTR (leaf, nothrow) int fnothrow () { return 0; }
static __typeof__ (fnothrow) ATTR (weakref ("fnothrow"), copy (fnothrow)) alias_fnothrow;
ATTR (leaf) int fthrow_none () throw () { return 0; }
// Verify that no warning is issued for the alias having less // restrictive attributes than the target: nothrow. static __typeof (fthrow_none) ATTR (weakref ("fthrow_none"), copy (fthrow_none)) alias_fthrow_none;
// Same as above but with no definition of the target. ATTR (leaf) int fthrow_none_nodef () throw ();
static __typeof (fthrow_none_nodef) ATTR (weakref ("fthrow_none_nodef"), copy (fthrow_none_nodef)) alias_fthrow_none_nodef;
// And again but without using typeof to make sure the nothrow // bit is copied by attribute copy alone. static int ATTR (weakref ("fthrow_none_nodef"), copy (fthrow_none_nodef)) alias_fthrow_none_nodef_func (); }
struct UsrClass { ~UsrClass (); };
// Verify that the nothrow attribute/bit was copied to the alias and // that no exception handling code is emitted in any of these calls.
int call_alias_fnothrow () { UsrClass usr; return alias_fnothrow (); }
int call_alias_fthrow_none () { UsrClass usr; return alias_fthrow_none (); }
int call_alias_fthrow_none_nodef () { UsrClass usr; return alias_fthrow_none_nodef (); }
int call_alias_fthrow_none_nodef_func () { UsrClass usr; return alias_fthrow_none_nodef_func (); }
// { dg-final { scan-tree-dump-not "__builtin_unwind" "optimized" } }
|