pragma-operators.cpp revision 688f2a1fc1ac38e8b7b602ab8afc69cdfa7492bf
1// RUN: %clang_cc1 -fms-extensions -std=c++11 -E %s | FileCheck %s 2 3// Test that we properly expand the C99 _Pragma and Microsoft __pragma 4// into #pragma directives, with newlines where needed. <rdar://problem/8412013> 5 6// CHECK: #line 7// CHECK: #pragma warning(push) 8// CHECK: extern "C" { 9// CHECK: #line 10// CHECK: #pragma warning(push) 11// CHECK: int foo() { return 0; } } 12// CHECK: #pragma warning(pop) 13#define A(X) extern "C" { __pragma(warning(push)) \ 14 int X() { return 0; } \ 15} 16#define B(X) A(X) 17#pragma warning(push) 18B(foo) 19#pragma warning(pop) 20 21#define pragma_L _Pragma(L"GCC diagnostic push") 22#define pragma_u8 _Pragma(u8"system_header") 23#define pragma_u _Pragma(u"GCC diagnostic pop") 24#define pragma_U _Pragma(U"comment(lib, \"libfoo\")") 25#define pragma_R _Pragma(R"(clang diagnostic ignored "-Wunused")") 26#define pragma_UR _Pragma(UR"(clang diagnostic error "-Wunused")") 27#define pragma_hello _Pragma(u8R"x(message R"y("Hello", world!)y")x") 28// CHECK: int n = 29// CHECK: #pragma GCC diagnostic push 30// CHECK: #pragma system_header 31// CHECK: #pragma GCC diagnostic pop 32// CHECK: #pragma comment(lib, "libfoo") 33// CHECK: #pragma clang diagnostic ignored "-Wunused" 34// CHECK: #pragma clang diagnostic error "-Wunused" 35// CHECK: #pragma message "\042Hello\042, world!" 36// CHECK: 0; 37int n = pragma_L pragma_u8 pragma_u pragma_U pragma_R pragma_UR pragma_hello 0; 38