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