10cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// RUN: %clang_cc1 %s -fms-extensions -E | FileCheck %s
20cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// We use -fms-extensions to test both _Pragma and __pragma.
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
40cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// A long time ago the pragma lexer's buffer showed through in -E output.
50cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NOT: scratch space
60cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
70cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose#define push_p _Pragma ("pack(push)")
80cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rosepush_p
90cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK: #pragma pack(push)
100cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
110cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rosepush_p _Pragma("pack(push)") __pragma(pack(push))
120cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK: #pragma pack(push)
130cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #line 11 "{{.*}}_Pragma-location.c"
140cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma pack(push)
150cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #line 11 "{{.*}}_Pragma-location.c"
160cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma pack(push)
170cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
180cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
190cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose#define __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS _Pragma("clang diagnostic push") \
200cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose_Pragma("clang diagnostic ignored \"-Wformat-extra-args\"")
210cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose#define __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS _Pragma("clang diagnostic pop")
220cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
230cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rosevoid test () {
240cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose  1;_Pragma("clang diagnostic push") \
250cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose  _Pragma("clang diagnostic ignored \"-Wformat-extra-args\"")
260cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose  _Pragma("clang diagnostic pop")
270cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
280cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose  2;__PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS
290cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose  3;__PRAGMA_POP_NO_EXTRA_ARG_WARNINGS
300cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose}
310cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
320cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK: void test () {
330cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT:   1;
340cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #line 24 "{{.*}}_Pragma-location.c"
350cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma clang diagnostic push
360cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma clang diagnostic ignored "-Wformat-extra-args"
370cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma clang diagnostic pop
380cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose
390cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK:   2;
400cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #line 28 "{{.*}}_Pragma-location.c"
410cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma clang diagnostic push
420cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #line 28 "{{.*}}_Pragma-location.c"
430cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma clang diagnostic ignored "-Wformat-extra-args"
440cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT:   3;
450cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #line 29 "{{.*}}_Pragma-location.c"
460cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: #pragma clang diagnostic pop
470cdd1fe3ec29b5cbff9a728966ace5c5b5d614f7Jordan Rose// CHECK-NEXT: }
48