1 /* Test for #pragma target macros. */
2 /* { dg-do compile } */
3 /* { dg-require-effective-target arm_arch_v8a_ok } */
4 /* { dg-add-options arm_arch_v8a } */
5
6 #include <arm_acle.h>
7
8 #ifdef __ARM_FEATURE_CRC32
9 # error "__ARM_FEATURE_CRC32 is already defined."
10 #endif
11
12 #pragma GCC push_options
13 #pragma GCC target ("arch=armv8-a+crc")
14 #ifndef __ARM_FEATURE_CRC32
15 # error "__ARM_FEATURE_CRC32 is not defined in push 1."
16 #endif
17 #pragma GCC pop_options
18
19 #ifdef __ARM_FEATURE_CRC32
20 # error "__ARM_FEATURE_CRC32 is defined after pop 1."
21 #endif
22
23 #pragma GCC push_options
24 #pragma GCC target ("+crc")
25 #ifndef __ARM_FEATURE_CRC32
26 # error "__ARM_FEATURE_CRC32 is not defined in push 2."
27 #endif
28 #pragma GCC pop_options
29
30 #ifdef __ARM_FEATURE_CRC32
31 # error "__ARM_FEATURE_CRC32 is defined after pop 2."
32 #endif
33
34 __attribute__((target("+crc")))
35 void test_crc_unknown_ok_attr_1 ()
36 {
37 __crc32b (0, 0);
38 }
39
40 #ifdef __ARM_FEATURE_CRC32
41 # error "__ARM_FEATURE_CRC32 is defined after attribute set 1."
42 #endif
43
44 __attribute__((target("arch=armv8-a+crc")))
45 void test_crc_unknown_ok_attr_2 ()
46 {
47 __crc32b (0, 0);
48 }
49
50 #ifdef __ARM_FEATURE_CRC32
51 # error "__ARM_FEATURE_CRC32 is defined after attribute set 2."
52 #endif
53
54 #pragma GCC reset_options