From e756e900e911fdbc57cd76d6c12d20a9b1892e55 Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Tue, 4 Jun 2019 21:52:32 +0000 Subject: [PATCH] re PR target/78263 (Compile failure with AltiVec library on PPC64le and -std=c++11 flag) [gcc] 2019-06-04 Bill Schmidt PR target/78263 * config/rs6000/altivec.h: Don't #define vector, pixel, bool for C++ with strict ANSI requirements. [gcc/testsuite] 2019-06-04 Bill Schmidt PR target/78263 * g++.target/powerpc: New directory. * g++.target/powerpc/powerpc.exp: New test driver. * g++.target/powerpc/undef-bool-3.C: New. From-SVN: r271927 --- gcc/ChangeLog | 6 +++ gcc/config/rs6000/altivec.h | 8 ++-- gcc/testsuite/ChangeLog | 7 +++ gcc/testsuite/g++.target/powerpc/powerpc.exp | 44 +++++++++++++++++++ .../g++.target/powerpc/undef-bool-3.C | 13 ++++++ 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.target/powerpc/powerpc.exp create mode 100644 gcc/testsuite/g++.target/powerpc/undef-bool-3.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30febc6fecc..8b3fe98771d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-04 Bill Schmidt + + PR target/78263 + * config/rs6000/altivec.h: Don't #define vector, pixel, bool for + C++ with strict ANSI requirements. + 2019-06-04 Marc Glisse * tree-ssa-loop-niter.c (number_of_iterations_ne): Skip diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h index d66ae7ca2c7..dafc76aeafa 100644 --- a/gcc/config/rs6000/altivec.h +++ b/gcc/config/rs6000/altivec.h @@ -37,10 +37,12 @@ /* If __APPLE_ALTIVEC__ is defined, the compiler supports 'vector', 'pixel' and 'bool' as context-sensitive AltiVec keywords (in non-AltiVec contexts, they revert to their original meanings, - if any), so we do not need to define them as macros. */ + if any), so we do not need to define them as macros. Also, + avoid defining them as macros for C++ with strict ANSI, as + this is not compatible. */ -#if !defined(__APPLE_ALTIVEC__) -/* You are allowed to undef these for C++ compatibility. */ +#if !defined(__APPLE_ALTIVEC__) \ + && (!defined(__STRICT_ANSI__) || !defined(__cplusplus)) #define vector __vector #define pixel __pixel #define bool __bool diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5978f7905f3..7bcc461327d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2019-06-04 Bill Schmidt + + PR target/78263 + * g++.target/powerpc: New directory. + * g++.target/powerpc/powerpc.exp: New test driver. + * g++.target/powerpc/undef-bool-3.C: New. + 2019-06-04 Jakub Jelinek * c-c++-common/gomp/lastprivate-conditional-2.c (foo): Don't expect diff --git a/gcc/testsuite/g++.target/powerpc/powerpc.exp b/gcc/testsuite/g++.target/powerpc/powerpc.exp new file mode 100644 index 00000000000..4e7ea3311e6 --- /dev/null +++ b/gcc/testsuite/g++.target/powerpc/powerpc.exp @@ -0,0 +1,44 @@ +# Specific regression driver for PowerPC. +# Copyright (C) 2019 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . */ + +# GCC testsuite that uses the `dg.exp' driver. + +# Exit immediately if this isn't a PowerPC target. +if {![istarget powerpc*-*-*] } then { + return +} + +# Load support procs. +load_lib g++-dg.exp + +global DEFAULT_CXXFLAGS +if ![info exists DEFAULT_CXXFLAGS] then { + set DEFAULT_CXXFLAGS " -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \ + "" $DEFAULT_CXXFLAGS + +# All done. +dg-finish + diff --git a/gcc/testsuite/g++.target/powerpc/undef-bool-3.C b/gcc/testsuite/g++.target/powerpc/undef-bool-3.C new file mode 100644 index 00000000000..27f3da58217 --- /dev/null +++ b/gcc/testsuite/g++.target/powerpc/undef-bool-3.C @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -std=c++11" } */ + +/* Test to ensure that "bool" is not #define'd in altivec.h for C++ when + we require strict ANSI. We should compile without errors. */ + +#include + +bool foo (int x) +{ + return x == 2; +} + -- 2.30.2