/* Test for #pragma target macros. */ /* { dg-do compile } */ /* { dg-require-effective-target arm_arch_v8a_ok } */ /* { dg-add-options arm_arch_v8a } */ #include #ifdef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is already defined." #endif #pragma GCC push_options #pragma GCC target ("arch=armv8-a+crc") #ifndef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is not defined in push 1." #endif #pragma GCC pop_options #ifdef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is defined after pop 1." #endif #pragma GCC push_options #pragma GCC target ("+crc") #ifndef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is not defined in push 2." #endif #pragma GCC pop_options #ifdef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is defined after pop 2." #endif __attribute__((target("+crc"))) void test_crc_unknown_ok_attr_1 () { __crc32b (0, 0); } #ifdef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is defined after attribute set 1." #endif __attribute__((target("arch=armv8-a+crc"))) void test_crc_unknown_ok_attr_2 () { __crc32b (0, 0); } #ifdef __ARM_FEATURE_CRC32 # error "__ARM_FEATURE_CRC32 is defined after attribute set 2." #endif #pragma GCC reset_options