diff options
Diffstat (limited to 'gcc/cppmacro.c')
-rw-r--r-- | gcc/cppmacro.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/cppmacro.c b/gcc/cppmacro.c index 58d3020..35e66f4 100644 --- a/gcc/cppmacro.c +++ b/gcc/cppmacro.c @@ -1403,7 +1403,6 @@ _cpp_create_definition (pfile, node) macro->paramc = 0; macro->fun_like = 0; macro->var_args = 0; - macro->disabled = 0; macro->count = 0; macro->expansion = (cpp_token *) POOL_FRONT (&pfile->macro_pool); @@ -1485,6 +1484,11 @@ _cpp_create_definition (pfile, node) /* Clear the whitespace flag from the leading token. */ macro->expansion[0].flags &= ~PREV_WHITE; + /* Implement the macro-defined-to-itself optimisation. */ + macro->disabled = (macro->count == 1 && !macro->fun_like + && macro->expansion[0].type == CPP_NAME + && macro->expansion[0].val.node == node); + /* Commit the memory. */ POOL_COMMIT (&pfile->macro_pool, macro->count * sizeof (cpp_token)); |