[gcc r13-8512] system.h: rename vec_step to workaround powerpc/clang bug [PR114369]

Jakub Jelinek jakub@gcc.gnu.org
Sat Mar 30 03:54:38 GMT 2024


https://gcc.gnu.org/g:8046a7e2aeeae80c15d99d55ae04755aedf46a2f

commit r13-8512-g8046a7e2aeeae80c15d99d55ae04755aedf46a2f
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Wed Mar 20 10:34:51 2024 +0100

    system.h: rename vec_step to workaround powerpc/clang bug [PR114369]
    
    On Sat, Jul 20, 2019 at 05:26:57PM +0100, Richard Sandiford wrote:
    > Gerald Pfeifer <gerald@pfeifer.com> writes:
    > > I have seen an increasing number of reports of GCC failing to
    > > build with clang on powerpc (on FreeBSD, though that's probably
    > > immaterial).
    > >
    > > Turns out that clang has vec_step as a reserved word on powerpc
    > > with AltiVec.
    > >
    > > We OTOH use vec_step s as a variable name in gcc/tree-vect-loop.c.
    > >
    > >
    > > The best approach I can see is to rename vec_step.  Before I prepare
    > > a patch: what alternate name/spelling would you prefer?
    >
    > Would it work to #define vec_step to vec_step_ or something on affected
    > hosts, say in system.h?
    >
    > I'd prefer that to renmaing since "vec_step" does seem the most natural
    > name for the variable.  The equivalent scalar variable is "step" and
    > other vector values in the surrounding code also use the "vec_" prefix.
    
    So like this?
    
    If/when clang finally fixes https://github.com/llvm/llvm-project/issues/85579
    on their side, we can then limit it to clang versions which still have the
    bug.
    
    I've git grepped for vec_set and appart from altivec.h it is just used in
    tree-vect-loop.cc, some Ada files which aren't preprocessed, ChangeLogs,
    rs6000-vecdefines.h (but that header is only included from altivec.h and
    vec_step is then redefined to the function-like macro) and in rs6000-overload.def
    but that file is processed with a generator, not included in C/C++ sources.
    
    2024-03-20  Jakub Jelinek  <jakub@redhat.com>
    
            PR bootstrap/114369
            * system.h (vec_step): Define to vec_step_ when compiling
            with clang on PowerPC.
    
    (cherry picked from commit 5e64228fe1f7ec536da314246eec968aea0d704d)

Diff:
---
 gcc/system.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gcc/system.h b/gcc/system.h
index cf45db3f97e..33e9d421115 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -1310,6 +1310,12 @@ void gcc_stablesort_r (void *, size_t, size_t, sort_r_cmp_fn *, void *data);
 #define NULL nullptr
 #endif
 
+/* Workaround clang on PowerPC which has vec_step as reserved keyword
+   rather than function-like macro defined in <altivec.h>.  See PR114369.  */
+#if defined(__clang__) && defined(__powerpc__)
+#define vec_step vec_step_
+#endif
+
 /* Return true if STR string starts with PREFIX.  */
 
 inline bool


More information about the Gcc-cvs mailing list