Commit ffc22840 by Georg-Johann Lay Committed by Georg-Johann Lay

target.def (addr_space): Add new diagnose_usage to hook vector.

gcc/
	* target.def (addr_space): Add new diagnose_usage to hook vector.
	* targhooks.c (default_addr_space_diagnose_usage): Add default
	implementation and...
	* targhooks.h (default_addr_space_diagnose_usage): ... its prototype.
	* c/c-parser.c (c_lex_one_token) [CPP_NAME]: If the token
	is some address space, call targetm.addr_space.diagnose_usage.
	* doc/tm.texi.in (Named Address Spaces): Add anchor for
	TARGET_ADDR_SPACE_DIAGNOSE_USAGE documentation.
	* doc/tm.texi: Regenerate.

From-SVN: r238514
parent 144530cf
2016-07-20 Georg-Johann Lay <avr@gjlay.de>
* target.def (addr_space): Add new diagnose_usage to hook vector.
* targhooks.c (default_addr_space_diagnose_usage): Add default
implementation and...
* targhooks.h (default_addr_space_diagnose_usage): ... its prototype.
* c/c-parser.c (c_lex_one_token) [CPP_NAME]: If the token
is some address space, call targetm.addr_space.diagnose_usage.
* doc/tm.texi.in (Named Address Spaces): Add anchor for
TARGET_ADDR_SPACE_DIAGNOSE_USAGE documentation.
* doc/tm.texi: Regenerate.
2016-07-20 Martin Liska <mliska@suse.cz>
PR middle-end/71898
......
......@@ -301,6 +301,9 @@ c_lex_one_token (c_parser *parser, c_token *token)
else if (rid_code >= RID_FIRST_ADDR_SPACE
&& rid_code <= RID_LAST_ADDR_SPACE)
{
addr_space_t as;
as = (addr_space_t) (rid_code - RID_FIRST_ADDR_SPACE);
targetm.addr_space.diagnose_usage (as, token->location);
token->id_kind = C_ID_ADDRSPACE;
token->keyword = rid_code;
break;
......
......@@ -10431,6 +10431,17 @@ Define this to define how the address space is encoded in dwarf.
The result is the value to be used with @code{DW_AT_address_class}.
@end deftypefn
@deftypefn {Target Hook} void TARGET_ADDR_SPACE_DIAGNOSE_USAGE (addr_space_t @var{as}, location_t @var{loc})
Define this hook if the availability of an address space depends on
command line options and some diagnostics should be printed when the
address space is used. This hook is called during parsing and allows
to emit a better diagnostic compared to the case where the address space
was not registered with @code{c_register_addr_space}. @var{as} is
the address space as registered with @code{c_register_addr_space}.
@var{loc} is the location of the address space qualifier token.
The default implementation does nothing.
@end deftypefn
@node Misc
@section Miscellaneous Parameters
@cindex parameters, miscellaneous
......
......@@ -7486,6 +7486,8 @@ c_register_addr_space ("__ea", ADDR_SPACE_EA);
@hook TARGET_ADDR_SPACE_DEBUG
@hook TARGET_ADDR_SPACE_DIAGNOSE_USAGE
@node Misc
@section Miscellaneous Parameters
@cindex parameters, miscellaneous
......
......@@ -3241,6 +3241,20 @@ The result is the value to be used with @code{DW_AT_address_class}.",
int, (addr_space_t as),
default_addr_space_debug)
/* Function to emit custom diagnostic if an address space is used. */
DEFHOOK
(diagnose_usage,
"Define this hook if the availability of an address space depends on\n\
command line options and some diagnostics should be printed when the\n\
address space is used. This hook is called during parsing and allows\n\
to emit a better diagnostic compared to the case where the address space\n\
was not registered with @code{c_register_addr_space}. @var{as} is\n\
the address space as registered with @code{c_register_addr_space}.\n\
@var{loc} is the location of the address space qualifier token.\n\
The default implementation does nothing.",
void, (addr_space_t as, location_t loc),
default_addr_space_diagnose_usage)
HOOK_VECTOR_END (addr_space)
#undef HOOK_PREFIX
......
......@@ -1291,6 +1291,15 @@ default_addr_space_debug (addr_space_t as)
return as;
}
/* The default hook implementation for TARGET_ADDR_SPACE_DIAGNOSE_USAGE.
Don't complain about any address space. */
void
default_addr_space_diagnose_usage (addr_space_t, location_t)
{
}
/* The default hook for TARGET_ADDR_SPACE_CONVERT. This hook should never be
called for targets with only a generic address space. */
......
......@@ -181,6 +181,7 @@ extern rtx default_addr_space_legitimize_address (rtx, rtx, machine_mode,
extern bool default_addr_space_subset_p (addr_space_t, addr_space_t);
extern bool default_addr_space_zero_address_valid (addr_space_t);
extern int default_addr_space_debug (addr_space_t);
extern void default_addr_space_diagnose_usage (addr_space_t, location_t);
extern rtx default_addr_space_convert (rtx, tree, tree);
extern unsigned int default_case_values_threshold (void);
extern bool default_have_conditional_execution (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment