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 | |
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
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/c-family/c-pragma.c | 3 | ||||
-rw-r--r-- | gcc/c-family/c-pragma.h | 2 | ||||
-rw-r--r-- | gcc/config/vms/vms-c.c | 37 |
4 files changed, 49 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e81d69..eab0ca4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +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. + 2011-11-15 Georg-Johann Lay <avr@gjlay.de> PR target/49868 diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c index 7622f0b..930423b 100644 --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -494,7 +494,8 @@ add_to_renaming_pragma_list (tree oldname, tree newname) p->newname = newname; } -static GTY(()) tree pragma_extern_prefix; +/* The current prefix set by #pragma extern_prefix. */ +GTY(()) tree pragma_extern_prefix; /* #pragma extern_prefix "prefix" */ static void diff --git a/gcc/c-family/c-pragma.h b/gcc/c-family/c-pragma.h index 04af94f..86681ae 100644 --- a/gcc/c-family/c-pragma.h +++ b/gcc/c-family/c-pragma.h @@ -146,4 +146,6 @@ extern enum cpp_ttype c_lex_with_flags (tree *, location_t *, unsigned char *, extern void c_pp_lookup_pragma (unsigned int, const char **, const char **); +extern GTY(()) tree pragma_extern_prefix; + #endif /* GCC_C_PRAGMA_H */ 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); } |