aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/vms/vms-c.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2011-11-15 10:22:55 +0000
committerTristan Gingold <gingold@gcc.gnu.org>2011-11-15 10:22:55 +0000
commite50e723eec48cdf285b27e51fead37b385d5f891 (patch)
treed4582430bbacc6d392241d140391b5fb7daa194c /gcc/config/vms/vms-c.c
parent7c209481147555ddd22296b1eff0fd1833588d35 (diff)
downloadgcc-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/vms-c.c')
-rw-r--r--gcc/config/vms/vms-c.c37
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);
}