Jordan Rose | 0cdd1fe | 2012-06-15 23:33:51 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 %s -fms-extensions -E | FileCheck %s |
| 2 | // We use -fms-extensions to test both _Pragma and __pragma. |
Reid Spencer | 5f016e2 | 2007-07-11 17:01:13 +0000 | [diff] [blame] | 3 | |
Jordan Rose | 0cdd1fe | 2012-06-15 23:33:51 +0000 | [diff] [blame^] | 4 | // A long time ago the pragma lexer's buffer showed through in -E output. |
| 5 | // CHECK-NOT: scratch space |
| 6 | |
| 7 | #define push_p _Pragma ("pack(push)") |
| 8 | push_p |
| 9 | // CHECK: #pragma pack(push) |
| 10 | |
| 11 | push_p _Pragma("pack(push)") __pragma(pack(push)) |
| 12 | // CHECK: #pragma pack(push) |
| 13 | // CHECK-NEXT: #line 11 "{{.*}}_Pragma-location.c" |
| 14 | // CHECK-NEXT: #pragma pack(push) |
| 15 | // CHECK-NEXT: #line 11 "{{.*}}_Pragma-location.c" |
| 16 | // CHECK-NEXT: #pragma pack(push) |
| 17 | |
| 18 | |
| 19 | #define __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS _Pragma("clang diagnostic push") \ |
| 20 | _Pragma("clang diagnostic ignored \"-Wformat-extra-args\"") |
| 21 | #define __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS _Pragma("clang diagnostic pop") |
| 22 | |
| 23 | void test () { |
| 24 | 1;_Pragma("clang diagnostic push") \ |
| 25 | _Pragma("clang diagnostic ignored \"-Wformat-extra-args\"") |
| 26 | _Pragma("clang diagnostic pop") |
| 27 | |
| 28 | 2;__PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS |
| 29 | 3;__PRAGMA_POP_NO_EXTRA_ARG_WARNINGS |
| 30 | } |
| 31 | |
| 32 | // CHECK: void test () { |
| 33 | // CHECK-NEXT: 1; |
| 34 | // CHECK-NEXT: #line 24 "{{.*}}_Pragma-location.c" |
| 35 | // CHECK-NEXT: #pragma clang diagnostic push |
| 36 | // CHECK-NEXT: #pragma clang diagnostic ignored "-Wformat-extra-args" |
| 37 | // CHECK-NEXT: #pragma clang diagnostic pop |
| 38 | |
| 39 | // CHECK: 2; |
| 40 | // CHECK-NEXT: #line 28 "{{.*}}_Pragma-location.c" |
| 41 | // CHECK-NEXT: #pragma clang diagnostic push |
| 42 | // CHECK-NEXT: #line 28 "{{.*}}_Pragma-location.c" |
| 43 | // CHECK-NEXT: #pragma clang diagnostic ignored "-Wformat-extra-args" |
| 44 | // CHECK-NEXT: 3; |
| 45 | // CHECK-NEXT: #line 29 "{{.*}}_Pragma-location.c" |
| 46 | // CHECK-NEXT: #pragma clang diagnostic pop |
| 47 | // CHECK-NEXT: } |