1 /* { dg-do run } */ 2 /* { dg-require-effective-target split_stack } */ 3 /* { dg-options "-fsplit-stack" } */ 4 5 /* Testcase for PR86213. On the first call to __morestack there is a live 6 value in xmm0, which was being clobbered by a call to getenv(). */ 7 8 #include <stdlib.h> 9 10 double gd[8]; 11 int z; 12 13 double bar(double q) __attribute__ ((noinline)); 14 double foo(double q) __attribute__ ((noinline)); 15 int ck(double q) __attribute__ ((noinline)); 16 int main(int argc, char **argv) __attribute__ ((no_split_stack)); 17 bar(double q)18double bar(double q) 19 { 20 double d[8]; 21 for (unsigned i = 0; i < 8; ++i) 22 d[i] = gd[8-i-1]; 23 return q + d[z&3]; 24 } 25 foo(double d)26double foo(double d) 27 { 28 return bar(d); 29 } 30 ck(double d)31int ck(double d) 32 { 33 if (d != 64.0) 34 abort(); 35 return 0; 36 } 37 38 typedef double (*fp)(double); 39 fp g = foo; 40 main(int argc,char ** argv)41int main(int argc, char **argv) { 42 return ck(g(64.0)); 43 } 44