c++: Poor diagnostic in header-unit [PR 99468]
We didn't specifically check for a module-decl inside a header unit. That leads to a confusing diagostic. Fixed thusly. gcc/cp/ * lex.c (module_token_filter::resume): Ignore module-decls inside header-unit. * parser.c (cp_parser_module_declaration): Reject in header-unit. gcc/testsuite/ * g++.dg/modules/pr99468.H: New.
This commit is contained in:
parent
cb25dea3ef
commit
504450c708
@ -515,7 +515,7 @@ struct module_token_filter
|
||||
{
|
||||
module_end:;
|
||||
/* End of the directive, handle the name. */
|
||||
if (import)
|
||||
if (import && (is_import || !flag_header_unit))
|
||||
if (module_state *m
|
||||
= preprocess_module (import, token_loc, module != NULL,
|
||||
is_import, got_export, reader))
|
||||
|
@ -13745,7 +13745,13 @@ cp_parser_module_declaration (cp_parser *parser, module_parse mp_state,
|
||||
parser->lexer->in_pragma = true;
|
||||
cp_token *token = cp_lexer_consume_token (parser->lexer);
|
||||
|
||||
if (mp_state == MP_FIRST && !exporting
|
||||
if (flag_header_unit)
|
||||
{
|
||||
error_at (token->location,
|
||||
"module-declaration not permitted in header-unit");
|
||||
goto skip_eol;
|
||||
}
|
||||
else if (mp_state == MP_FIRST && !exporting
|
||||
&& cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
|
||||
{
|
||||
/* Start global module fragment. */
|
||||
|
7
gcc/testsuite/g++.dg/modules/pr99468.H
Normal file
7
gcc/testsuite/g++.dg/modules/pr99468.H
Normal file
@ -0,0 +1,7 @@
|
||||
// PR 99468, stupidly worded diagnostic
|
||||
// { dg-additional-options -fmodule-header }
|
||||
|
||||
module M; // { dg-error "module-declaration not permitted" }
|
||||
|
||||
int i;
|
||||
// { dg-prune-output "not writing" }
|
Loading…
Reference in New Issue
Block a user