1 /* { dg-do compile } */ 2 /* { dg-options "-Wall" } */ 3 4 /* N1312 7.1.1: The FLOAT_CONST_DECIMAL64 pragma. 5 C99 6.4.4.2a (New). */ 6 7 /* Check that defining macros whose names are the same as the tokens used 8 in the pragma doesn't affect use of the pragma. */ 9 10 #define ON YES 11 #define OFF NO 12 #define DEFAULT NOPE 13 #define STDC OFFICIAL 14 #define FLOAT_CONST_DECIMAL64 NEW_PRAGMA 15 16 double a; 17 18 void f1a(void)19f1a (void) 20 { 21 #pragma STDC FLOAT_CONST_DECIMAL64 ON 22 a = 1.0dd + 2.0; 23 } 24 25 void f1b(void)26f1b (void) 27 { 28 #pragma STDC FLOAT_CONST_DECIMAL64 OFF 29 a = 2.0d + 3.0; 30 } 31 32 void f1c(void)33f1c (void) 34 { 35 #pragma STDC FLOAT_CONST_DECIMAL64 DEFAULT 36 a = 3.0d + 4.0; 37 } 38 39 /* Check that a macro can be used for the entire pragma. */ 40 41 #define PRAGMA(x) _Pragma (#x) 42 #define DEFAULT_FLOAT_IS_DECIMAL PRAGMA(STDC FLOAT_CONST_DECIMAL64 ON) 43 #define DEFAULT_FLOAT_IS_BINARY PRAGMA(STDC FLOAT_CONST_DECIMAL64 OFF) 44 45 void f2a(void)46f2a (void) 47 { 48 DEFAULT_FLOAT_IS_DECIMAL 49 a = 5.0 * 6.0dd; 50 } 51 52 void f2b(void)53f2b (void) 54 { 55 DEFAULT_FLOAT_IS_BINARY 56 a = 6.0 * 7.0d; 57 } 58 59 /* _Pragma can be used with macros, including the use of a macro for the 60 switch. */ 61 62 #undef ON 63 #undef OFF 64 #undef DEFAULT 65 #undef STDC 66 #undef FLOAT_CONST_DECIMAL64 67 68 #define SWITCH ON 69 #define FLOAT_CONST_DECIMAL64(x) PRAGMA(STDC FLOAT_CONST_DECIMAL64 x) 70 71 void f3a(void)72f3a (void) 73 { 74 FLOAT_CONST_DECIMAL64(SWITCH) 75 a = 1.0 * 7.0dd; 76 } 77 78 void f3b(void)79f3b (void) 80 { 81 FLOAT_CONST_DECIMAL64(OFF) 82 a = 1.0 + 2.0d; 83 } 84