preprocessor: Don't register pragmas in directives-only mode [PR108244]
libcpp's directives-only mode does not expect deferred pragmas to be registered, but to date the c-family registration process has not checked for this case. That issue became more visible since r13-1544, which added the commonly used GCC diagnostic pragmas to the set of those registered in preprocessing modes. Fix it by checking for directives-only mode in c-family/c-pragma.cc. gcc/c-family/ChangeLog: PR preprocessor/108244 * c-pragma.cc (c_register_pragma_1): Don't attempt to register any deferred pragmas if -fdirectives-only. (init_pragma): Likewise. gcc/testsuite/ChangeLog: * c-c++-common/cpp/pr108244-1.c: New test. * c-c++-common/cpp/pr108244-2.c: New test. * c-c++-common/gomp/pr108244-3.c: New test.
This commit is contained in:
parent
688fc162b7
commit
9ca4899144
4 changed files with 45 additions and 24 deletions
|
@ -1647,7 +1647,8 @@ c_register_pragma_1 (const char *space, const char *name,
|
|||
|
||||
if (flag_preprocess_only)
|
||||
{
|
||||
if (!(allow_expansion || ihandler.early_handler.handler_1arg))
|
||||
if (cpp_get_options (parse_in)->directives_only
|
||||
|| !(allow_expansion || ihandler.early_handler.handler_1arg))
|
||||
return;
|
||||
|
||||
pragma_pp_data pp_data;
|
||||
|
@ -1811,34 +1812,39 @@ c_pp_invoke_early_pragma_handler (unsigned int id)
|
|||
void
|
||||
init_pragma (void)
|
||||
{
|
||||
if (flag_openacc)
|
||||
|
||||
if (!cpp_get_options (parse_in)->directives_only)
|
||||
{
|
||||
const int n_oacc_pragmas = ARRAY_SIZE (oacc_pragmas);
|
||||
int i;
|
||||
if (flag_openacc)
|
||||
{
|
||||
const int n_oacc_pragmas = ARRAY_SIZE (oacc_pragmas);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < n_oacc_pragmas; ++i)
|
||||
cpp_register_deferred_pragma (parse_in, "acc", oacc_pragmas[i].name,
|
||||
oacc_pragmas[i].id, true, true);
|
||||
}
|
||||
for (i = 0; i < n_oacc_pragmas; ++i)
|
||||
cpp_register_deferred_pragma (parse_in, "acc", oacc_pragmas[i].name,
|
||||
oacc_pragmas[i].id, true, true);
|
||||
}
|
||||
|
||||
if (flag_openmp)
|
||||
{
|
||||
const int n_omp_pragmas = ARRAY_SIZE (omp_pragmas);
|
||||
int i;
|
||||
if (flag_openmp)
|
||||
{
|
||||
const int n_omp_pragmas = ARRAY_SIZE (omp_pragmas);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < n_omp_pragmas; ++i)
|
||||
cpp_register_deferred_pragma (parse_in, "omp", omp_pragmas[i].name,
|
||||
omp_pragmas[i].id, true, true);
|
||||
}
|
||||
if (flag_openmp || flag_openmp_simd)
|
||||
{
|
||||
const int n_omp_pragmas_simd = sizeof (omp_pragmas_simd)
|
||||
/ sizeof (*omp_pragmas);
|
||||
int i;
|
||||
for (i = 0; i < n_omp_pragmas; ++i)
|
||||
cpp_register_deferred_pragma (parse_in, "omp", omp_pragmas[i].name,
|
||||
omp_pragmas[i].id, true, true);
|
||||
}
|
||||
if (flag_openmp || flag_openmp_simd)
|
||||
{
|
||||
const int n_omp_pragmas_simd
|
||||
= sizeof (omp_pragmas_simd) / sizeof (*omp_pragmas);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < n_omp_pragmas_simd; ++i)
|
||||
cpp_register_deferred_pragma (parse_in, "omp", omp_pragmas_simd[i].name,
|
||||
omp_pragmas_simd[i].id, true, true);
|
||||
for (i = 0; i < n_omp_pragmas_simd; ++i)
|
||||
cpp_register_deferred_pragma (parse_in, "omp",
|
||||
omp_pragmas_simd[i].name,
|
||||
omp_pragmas_simd[i].id, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (!flag_preprocess_only)
|
||||
|
|
5
gcc/testsuite/c-c++-common/cpp/pr108244-1.c
Normal file
5
gcc/testsuite/c-c++-common/cpp/pr108244-1.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* { dg-do preprocess } */
|
||||
/* { dg-additional-options "-fdirectives-only" } */
|
||||
#pragma GCC diagnostic push
|
||||
#ifdef t
|
||||
#endif
|
5
gcc/testsuite/c-c++-common/cpp/pr108244-2.c
Normal file
5
gcc/testsuite/c-c++-common/cpp/pr108244-2.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* { dg-do preprocess } */
|
||||
/* { dg-additional-options "-fdirectives-only" } */
|
||||
#pragma message "hello"
|
||||
#ifdef t
|
||||
#endif
|
5
gcc/testsuite/c-c++-common/gomp/pr108244-3.c
Normal file
5
gcc/testsuite/c-c++-common/gomp/pr108244-3.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* { dg-do preprocess } */
|
||||
/* { dg-additional-options "-fdirectives-only -fopenmp" } */
|
||||
#pragma omp parallel
|
||||
#ifdef t
|
||||
#endif
|
Loading…
Add table
Reference in a new issue