Hi! There is a rare corner case: where __vector is followed only with ";" and near the end of the file.
Like the case in PR101168: using vdbl = __vector double; #define BREAK 1 For this case, "__vector double" is not followed by a PP_NAME, it is followed by CPP_SEMICOLON and then EOF. In this case, there is no more tokens in the file. Then, do not need to continue to parse the file. This patch pass bootstrap and regtest on ppc64 and ppc64le. BR, Jiufu PR preprocessor/101168 gcc/ChangeLog: * config/rs6000/rs6000-c.cc (rs6000_macro_to_expand): Avoid empty identifier. gcc/testsuite/ChangeLog: * g++.target/powerpc/pr101168.C: New test. --- gcc/config/rs6000/rs6000-c.cc | 4 +++- gcc/testsuite/g++.target/powerpc/pr101168.C | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.target/powerpc/pr101168.C diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc index 3b62b499df2..f8cc7bad812 100644 --- a/gcc/config/rs6000/rs6000-c.cc +++ b/gcc/config/rs6000/rs6000-c.cc @@ -282,7 +282,9 @@ rs6000_macro_to_expand (cpp_reader *pfile, const cpp_token *tok) expand_bool_pixel = __pixel_keyword; else if (ident == C_CPP_HASHNODE (__bool_keyword)) expand_bool_pixel = __bool_keyword; - else + + /* If it needs to check tokens continue. */ + else if (ident) { /* Try two tokens down, too. */ do diff --git a/gcc/testsuite/g++.target/powerpc/pr101168.C b/gcc/testsuite/g++.target/powerpc/pr101168.C new file mode 100644 index 00000000000..284e77fdc88 --- /dev/null +++ b/gcc/testsuite/g++.target/powerpc/pr101168.C @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_altivec_ok } */ +/* { dg-options "-maltivec" } */ + +using vdbl = __vector double; +#define BREAK 1 -- 2.25.1