]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000: avoid peeking eof after __vector
authorJiufu Guo <guojiufu@linux.ibm.com>
Mon, 9 May 2022 09:48:00 +0000 (17:48 +0800)
committerguojiufu <guojiufu@linux.ibm.com>
Tue, 10 May 2022 03:36:22 +0000 (11:36 +0800)
There is a rare corner case: where vector is followed only by one
valid identifer and the ";" which is near the end of the file.

Like the case in PR101168:
using vdbl =  __vector double;
#define BREAK 1

For this case, "vector double" is followed by CPP_SEMICOLON and then
EOF.  There is no more tokens need to check for this case.

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
gcc/testsuite/g++.target/powerpc/pr101168.C [new file with mode: 0644]

index 84bb98f94fb62e8cfbcdc9cdb5378a33f3f3e5d4..9c8cbd7a66e43a08e1bb79f80d182a63ffe6097f 100644 (file)
@@ -178,9 +178,8 @@ rid_int128(void)
   return RID_MAX + 1;
 }
 
-/* Called to decide whether a conditional macro should be expanded.
-   Since we have exactly one such macro (i.e, 'vector'), we do not
-   need to examine the 'tok' parameter.  */
+/* Called to decide whether a conditional macro should be expanded
+   by peeking two or more tokens(_bool/_pixel/int/long/double/...).  */
 
 static cpp_hashnode *
 rs6000_macro_to_expand (cpp_reader *pfile, const cpp_token *tok)
@@ -282,7 +281,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 there are more tokens to check.  */
+             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 (file)
index 0000000..284e77f
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+using vdbl =  __vector double;
+#define BREAK 1