1 // RUN: %clang_cc1 %s -fms-extensions -E | FileCheck %s 2 // We use -fms-extensions to test both _Pragma and __pragma. 3 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: } 48