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 <meiss...@linux.vnet.ibm.com> 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 <meiss...@linux.vnet.ibm.com> PR target/56043 * gcc.target/powerpc/vsx-mass-1.c: Only run this test on powerpc*-*-linux*. -- Michael Meissner, IBM 5 Technology Place Drive, M/S 2757, Westford, MA 01886-3141, USA meiss...@linux.vnet.ibm.com fax +1 (978) 399-6899
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" } */