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
This commit is contained in:
Tristan Gingold 2011-11-15 10:22:55 +00:00 committed by Tristan Gingold
parent 7c20948114
commit e50e723eec
4 changed files with 49 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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);
}