* and #pragma pop_macro("macro_name")

* give warning if pragma is unknown for tcc
    * don't free asm_label in sym_free(),
      it's a job of the asm_free_labels().

    The above pragmas are used in the mingw headers.
    Thise pragmas are implemented in gcc-4.5+ and current
    clang.
This commit is contained in:
seyko
2015-04-21 06:34:35 +03:00
parent 5e8fb713c4
commit 0c8447db79
8 changed files with 71 additions and 3 deletions

View File

@ -0,0 +1,23 @@
#include <stdio.h>
int main()
{
#define abort "111"
printf("abort = %s\n", abort);
#pragma push_macro("abort")
#undef abort
#define abort "222"
printf("abort = %s\n", abort);
#pragma push_macro("abort")
#undef abort
#define abort "333"
printf("abort = %s\n", abort);
#pragma pop_macro("abort")
printf("abort = %s\n", abort);
#pragma pop_macro("abort")
printf("abort = %s\n", abort);
}

View File

@ -0,0 +1,5 @@
abort = 111
abort = 222
abort = 333
abort = 222
abort = 111

View File

@ -95,7 +95,8 @@ TESTS = \
73_arm64.test \
74_nocode_wanted.test \
75_array_in_struct_init.test \
76_dollars_in_identifiers.test
76_dollars_in_identifiers.test \
77_push_pop_macro.test
# 34_array_assignment.test -- array assignment is not in C standard