Message ID | 20130207223408.GA19552@ibm-tiger.the-meissners.org |
---|---|
State | New |
Headers | show |
On Thu, Feb 7, 2013 at 5:34 PM, Michael Meissner <meissner@linux.vnet.ibm.com> wrote: > 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 <meissner@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 <meissner@linux.vnet.ibm.com> > > PR target/56043 > * gcc.target/powerpc/vsx-mass-1.c: Only run this test on > powerpc*-*-linux*. Okay. Thanks, David
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" } */