From patchwork Thu Feb 7 22:34:09 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: PR 56043, Fix segfault in 4.7/4.8 powerpc tests Date: Thu, 07 Feb 2013 12:34:09 -0000 From: Michael Meissner X-Patchwork-Id: 219011 Message-Id: <20130207223408.GA19552@ibm-tiger.the-meissners.org> To: gcc-patches@gcc.gnu.org, dje.gcc@gmail.com The following patch fixes a segmentation fault for the powerpc-none-eabi toolchain on the vsx-mass-1.c test. Some of the builtin functions are not defined in that environment, and the compiler did not check whether a pointer was NULL before using it. I also fixed the test so that it would only run under powerpc*-*-linux*, since the text would fail on systems like eabi because some of the builtin functions would not call their vector counterparts in the MASS library. I've built both 4.8 and 4.7 with this patch, and I didn't notice any regressions. Is it ok to install in both the 4.7 tree and trunk? [gcc] 2013-02-07 Michael Meissner PR target/56043 * config/rs6000/rs6000.c (rs6000_builtin_vectorized_libmass): If there is no implicit builtin declaration, just return NULL. [gcc/testsuite] 2013-02-07 Michael Meissner PR target/56043 * gcc.target/powerpc/vsx-mass-1.c: Only run this test on powerpc*-*-linux*. Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 195825) +++ gcc/config/rs6000/rs6000.c (working copy) @@ -3699,7 +3699,8 @@ rs6000_builtin_vectorized_libmass (tree bdecl = builtin_decl_implicit (fn); suffix = "d2"; /* pow -> powd2 */ if (el_mode != DFmode - || n != 2) + || n != 2 + || !bdecl) return NULL_TREE; break; @@ -3736,7 +3737,8 @@ rs6000_builtin_vectorized_libmass (tree bdecl = builtin_decl_implicit (fn); suffix = "4"; /* powf -> powf4 */ if (el_mode != SFmode - || n != 4) + || n != 4 + || !bdecl) return NULL_TREE; break; @@ -3749,6 +3751,9 @@ rs6000_builtin_vectorized_libmass (tree gcc_assert (suffix != NULL); bname = IDENTIFIER_POINTER (DECL_NAME (bdecl)); + if (!bname) + return NULL_TREE; + strcpy (name, bname + sizeof ("__builtin_") - 1); strcat (name, suffix); Index: gcc/testsuite/gcc.target/powerpc/vsx-mass-1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/vsx-mass-1.c (revision 195825) +++ gcc/testsuite/gcc.target/powerpc/vsx-mass-1.c (working copy) @@ -1,4 +1,4 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-do compile { target { powerpc*-*-linux* } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_vsx_ok } */ /* { dg-options "-O3 -ftree-vectorize -mcpu=power7 -ffast-math -mveclibabi=mass" } */