diff options
Diffstat (limited to 'clang/test/Preprocessor/pragma-pushpop-macro.c')
-rw-r--r-- | clang/test/Preprocessor/pragma-pushpop-macro.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/clang/test/Preprocessor/pragma-pushpop-macro.c b/clang/test/Preprocessor/pragma-pushpop-macro.c new file mode 100644 index 0000000..08a6570 --- /dev/null +++ b/clang/test/Preprocessor/pragma-pushpop-macro.c @@ -0,0 +1,41 @@ +/* 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; + +// 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 + |