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