| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* Test pragma pop_macro and push_macro directives from
- http://msdn.microsoft.com/en-us/library/hsttss76.aspx */
- // pop_macro: Sets the value of the macro_name macro to the value on the top of
- // the stack for this macro.
- // #pragma pop_macro("macro_name")
- // push_macro: Saves the value of the macro_name macro on the top of the stack
- // for this macro.
- // #pragma push_macro("macro_name")
- //
- // RUN: %clang_cc1 -fms-extensions -E %s -o - | FileCheck %s
- #define X 1
- #define Y 2
- int pmx0 = X;
- int pmy0 = Y;
- #define Y 3
- #pragma push_macro("Y")
- #pragma push_macro("X")
- int pmx1 = X;
- #define X 2
- int pmx2 = X;
- #pragma pop_macro("X")
- int pmx3 = X;
- #pragma pop_macro("Y")
- int pmy1 = Y;
- // Have a stray 'push' to show we don't crash when having imbalanced
- // push/pop
- #pragma push_macro("Y")
- #define Y 4
- int pmy2 = Y;
- // The sequence push, define/undef, pop caused problems if macro was not
- // previously defined.
- #pragma push_macro("PREVIOUSLY_UNDEFINED1")
- #undef PREVIOUSLY_UNDEFINED1
- #pragma pop_macro("PREVIOUSLY_UNDEFINED1")
- #ifndef PREVIOUSLY_UNDEFINED1
- int Q;
- #endif
- #pragma push_macro("PREVIOUSLY_UNDEFINED2")
- #define PREVIOUSLY_UNDEFINED2
- #pragma pop_macro("PREVIOUSLY_UNDEFINED2")
- #ifndef PREVIOUSLY_UNDEFINED2
- int P;
- #endif
- // CHECK: int pmx0 = 1
- // CHECK: int pmy0 = 2
- // CHECK: int pmx1 = 1
- // CHECK: int pmx2 = 2
- // CHECK: int pmx3 = 1
- // CHECK: int pmy1 = 3
- // CHECK: int pmy2 = 4
- // CHECK: int Q;
- // CHECK: int P;
|