From 62c5ea5228857a910b38df91c2b0fe28f4d1ddc8 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 14 Dec 2020 07:21:49 -0800 Subject: preprocessor: Deferred macro support For deferred macros we also need a new field on the macro itself, so that the module machinery can determine the macro was imported. Also the documentation for the hashnode's deferred field was incomplete. libcpp/ * include/cpplib.h (struct cpp_macro): Add imported_p field. (struct cpp_hashnode): Tweak deferred field documentation. * macro.c (_cpp_new_macro): Clear new field. (cpp_get_deferred_macro, get_deferred_or_lazy_macro): Assert more. --- libcpp/include/cpplib.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'libcpp/include/cpplib.h') diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 692aee5..50d28dc 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -826,7 +826,10 @@ struct GTY(()) cpp_macro { tokens. */ unsigned int extra_tokens : 1; - /* 1 bits spare (32-bit). 33 on 64-bit target. */ + /* Imported C++20 macro (from a header unit). */ + unsigned int imported_p : 1; + + /* 0 bits spare (32-bit). 32 on 64-bit target. */ union cpp_exp_u { @@ -921,9 +924,11 @@ struct GTY(()) cpp_hashnode { /* 5 bits spare. */ - /* On a 64-bit system there would be 32-bits of padding to the value + /* The deferred cookie is applicable to NT_USER_MACRO or NT_VOID. + The latter for when a macro had a prevailing undef. + On a 64-bit system there would be 32-bits of padding to the value field. So placing the deferred index here is not costly. */ - unsigned deferred; /* Deferred index, (unless zero). */ + unsigned deferred; /* Deferred cookie */ union _cpp_hashnode_value GTY ((desc ("%1.type"))) value; }; -- cgit v1.1