1*67e74705SXin Li /* Test pragma pop_macro and push_macro directives from 2*67e74705SXin Li http://msdn.microsoft.com/en-us/library/hsttss76.aspx */ 3*67e74705SXin Li 4*67e74705SXin Li // pop_macro: Sets the value of the macro_name macro to the value on the top of 5*67e74705SXin Li // the stack for this macro. 6*67e74705SXin Li // #pragma pop_macro("macro_name") 7*67e74705SXin Li // push_macro: Saves the value of the macro_name macro on the top of the stack 8*67e74705SXin Li // for this macro. 9*67e74705SXin Li // #pragma push_macro("macro_name") 10*67e74705SXin Li // 11*67e74705SXin Li // RUN: %clang_cc1 -fms-extensions -E %s -o - | FileCheck %s 12*67e74705SXin Li 13*67e74705SXin Li #define X 1 14*67e74705SXin Li #define Y 2 15*67e74705SXin Li int pmx0 = X; 16*67e74705SXin Li int pmy0 = Y; 17*67e74705SXin Li #define Y 3 18*67e74705SXin Li #pragma push_macro("Y") 19*67e74705SXin Li #pragma push_macro("X") 20*67e74705SXin Li int pmx1 = X; 21*67e74705SXin Li #define X 2 22*67e74705SXin Li int pmx2 = X; 23*67e74705SXin Li #pragma pop_macro("X") 24*67e74705SXin Li int pmx3 = X; 25*67e74705SXin Li #pragma pop_macro("Y") 26*67e74705SXin Li int pmy1 = Y; 27*67e74705SXin Li 28*67e74705SXin Li // Have a stray 'push' to show we don't crash when having imbalanced 29*67e74705SXin Li // push/pop 30*67e74705SXin Li #pragma push_macro("Y") 31*67e74705SXin Li #define Y 4 32*67e74705SXin Li int pmy2 = Y; 33*67e74705SXin Li 34*67e74705SXin Li // The sequence push, define/undef, pop caused problems if macro was not 35*67e74705SXin Li // previously defined. 36*67e74705SXin Li #pragma push_macro("PREVIOUSLY_UNDEFINED1") 37*67e74705SXin Li #undef PREVIOUSLY_UNDEFINED1 38*67e74705SXin Li #pragma pop_macro("PREVIOUSLY_UNDEFINED1") 39*67e74705SXin Li #ifndef PREVIOUSLY_UNDEFINED1 40*67e74705SXin Li int Q; 41*67e74705SXin Li #endif 42*67e74705SXin Li 43*67e74705SXin Li #pragma push_macro("PREVIOUSLY_UNDEFINED2") 44*67e74705SXin Li #define PREVIOUSLY_UNDEFINED2 45*67e74705SXin Li #pragma pop_macro("PREVIOUSLY_UNDEFINED2") 46*67e74705SXin Li #ifndef PREVIOUSLY_UNDEFINED2 47*67e74705SXin Li int P; 48*67e74705SXin Li #endif 49*67e74705SXin Li 50*67e74705SXin Li // CHECK: int pmx0 = 1 51*67e74705SXin Li // CHECK: int pmy0 = 2 52*67e74705SXin Li // CHECK: int pmx1 = 1 53*67e74705SXin Li // CHECK: int pmx2 = 2 54*67e74705SXin Li // CHECK: int pmx3 = 1 55*67e74705SXin Li // CHECK: int pmy1 = 3 56*67e74705SXin Li // CHECK: int pmy2 = 4 57*67e74705SXin Li // CHECK: int Q; 58*67e74705SXin Li // CHECK: int P; 59