diff options
author | Tristan Gingold <gingold@adacore.com> | 2011-11-15 10:22:55 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@gcc.gnu.org> | 2011-11-15 10:22:55 +0000 |
commit | e50e723eec48cdf285b27e51fead37b385d5f891 (patch) | |
tree | d4582430bbacc6d392241d140391b5fb7daa194c /gcc/config/vms | |
parent | 7c209481147555ddd22296b1eff0fd1833588d35 (diff) | |
download | gcc-e50e723eec48cdf285b27e51fead37b385d5f891.zip gcc-e50e723eec48cdf285b27e51fead37b385d5f891.tar.gz gcc-e50e723eec48cdf285b27e51fead37b385d5f891.tar.bz2 |
c-pragma.h (pragma_extern_prefix): Declare.
2011-11-15 Tristan Gingold <gingold@adacore.com>
* c-family/c-pragma.h (pragma_extern_prefix): Declare.
* c-family/c-pragma.c (pragma_extern_prefix): Make it public.
* config/vms/vms-c.c (saved_extern_prefix): New variable.
(vms_pragma_extern_prefix): New function.
(vms_c_register_pragma): Register vms_pragma_extern_prefix.
From-SVN: r181379
Diffstat (limited to 'gcc/config/vms')
-rw-r--r-- | gcc/config/vms/vms-c.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/gcc/config/vms/vms-c.c b/gcc/config/vms/vms-c.c index eb4c635..19291b6 100644 --- a/gcc/config/vms/vms-c.c +++ b/gcc/config/vms/vms-c.c @@ -227,6 +227,42 @@ vms_pragma_message (cpp_reader *pfile ATTRIBUTE_UNUSED) #endif } +/* Handle '#pragma __extern_prefix' */ + +static GTY(()) tree saved_extern_prefix; + +static void +vms_pragma_extern_prefix (cpp_reader * ARG_UNUSED (dummy)) +{ + enum cpp_ttype tok; + tree x; + + tok = pragma_lex (&x); + if (tok == CPP_NAME) + { + const char *op = IDENTIFIER_POINTER (x); + + if (!strcmp (op, "__save")) + saved_extern_prefix = pragma_extern_prefix; + else if (!strcmp (op, "__restore")) + pragma_extern_prefix = saved_extern_prefix; + else + warning (OPT_Wpragmas, + "malformed '#pragma __extern_prefix', ignoring"); + return; + } + else if (tok != CPP_STRING) + { + warning (OPT_Wpragmas, + "malformed '#pragma __extern_prefix', ignoring"); + } + else + { + /* Note that the length includes the null terminator. */ + pragma_extern_prefix = (TREE_STRING_LENGTH (x) > 1 ? x : NULL); + } +} + /* Add vms-specific pragma. */ void @@ -245,4 +281,5 @@ vms_c_register_pragma (void) c_register_pragma (NULL, "__extern_model", vms_pragma_extern_model); c_register_pragma (NULL, "extern_model", vms_pragma_extern_model); c_register_pragma (NULL, "__message", vms_pragma_message); + c_register_pragma (NULL, "__extern_prefix", vms_pragma_extern_prefix); } |