1*67e74705SXin Li // RUN: %clang_cc1 -fms-extensions -std=c++11 -E %s -fuse-line-directives | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // Test that we properly expand the C99 _Pragma and Microsoft __pragma 4*67e74705SXin Li // into #pragma directives, with newlines where needed. <rdar://problem/8412013> 5*67e74705SXin Li 6*67e74705SXin Li // CHECK: #line 7*67e74705SXin Li // CHECK: #pragma warning(push) 8*67e74705SXin Li // CHECK: extern "C" { 9*67e74705SXin Li // CHECK: #line 10*67e74705SXin Li // CHECK: #pragma warning(push) 11*67e74705SXin Li // CHECK: int foo() { return 0; } } 12*67e74705SXin Li // CHECK: #pragma warning(pop) 13*67e74705SXin Li #define A(X) extern "C" { __pragma(warning(push)) \ 14*67e74705SXin Li int X() { return 0; } \ 15*67e74705SXin Li } 16*67e74705SXin Li #define B(X) A(X) 17*67e74705SXin Li #pragma warning(push) 18*67e74705SXin Li B(foo) 19*67e74705SXin Li #pragma warning(pop) 20*67e74705SXin Li 21*67e74705SXin Li #define pragma_L _Pragma(L"GCC diagnostic push") 22*67e74705SXin Li #define pragma_u8 _Pragma(u8"system_header") 23*67e74705SXin Li #define pragma_u _Pragma(u"GCC diagnostic pop") 24*67e74705SXin Li #define pragma_U _Pragma(U"comment(lib, \"libfoo\")") 25*67e74705SXin Li #define pragma_R _Pragma(R"(clang diagnostic ignored "-Wunused")") 26*67e74705SXin Li #define pragma_UR _Pragma(UR"(clang diagnostic error "-Wunused")") 27*67e74705SXin Li #define pragma_hello _Pragma(u8R"x(message R"y("Hello", world!)y")x") 28*67e74705SXin Li // CHECK: int n = 29*67e74705SXin Li // CHECK: #pragma GCC diagnostic push 30*67e74705SXin Li // CHECK: #pragma system_header 31*67e74705SXin Li // CHECK: #pragma GCC diagnostic pop 32*67e74705SXin Li // CHECK: #pragma comment(lib, "libfoo") 33*67e74705SXin Li // CHECK: #pragma clang diagnostic ignored "-Wunused" 34*67e74705SXin Li // CHECK: #pragma clang diagnostic error "-Wunused" 35*67e74705SXin Li // CHECK: #pragma message("\042Hello\042, world!") 36*67e74705SXin Li // CHECK: 0; 37*67e74705SXin Li int n = pragma_L pragma_u8 pragma_u pragma_U pragma_R pragma_UR pragma_hello 0; 38*67e74705SXin Li 39*67e74705SXin Li #pragma warning(disable : 1 2L 3U ; error : 4 5 6 ; suppress : 7 8 9) 40*67e74705SXin Li // CHECK: #pragma warning(disable: 1 2 3) 41*67e74705SXin Li // CHECK: #line [[@LINE-2]] 42*67e74705SXin Li // CHECK: #pragma warning(error: 4 5 6) 43*67e74705SXin Li // CHECK: #line [[@LINE-4]] 44*67e74705SXin Li // CHECK: #pragma warning(suppress: 7 8 9) 45*67e74705SXin Li 46*67e74705SXin Li #pragma warning(push) 47*67e74705SXin Li #pragma warning(push, 1L) 48*67e74705SXin Li #pragma warning(push, 4U) 49*67e74705SXin Li #pragma warning(push, 0x1) 50*67e74705SXin Li #pragma warning(push, 03) 51*67e74705SXin Li #pragma warning(push, 0b10) 52*67e74705SXin Li #pragma warning(push, 1i8) 53*67e74705SXin Li // CHECK: #pragma warning(push) 54*67e74705SXin Li // CHECK: #pragma warning(push, 1) 55*67e74705SXin Li // CHECK: #pragma warning(push, 4) 56*67e74705SXin Li // CHECK: #pragma warning(push, 1) 57*67e74705SXin Li // CHECK: #pragma warning(push, 3) 58*67e74705SXin Li // CHECK: #pragma warning(push, 2) 59*67e74705SXin Li // CHECK: #pragma warning(push, 1) 60