diff --git a/gcc48-pr56022.patch b/gcc48-pr56022.patch new file mode 100644 index 0000000..e0ef478 --- /dev/null +++ b/gcc48-pr56022.patch @@ -0,0 +1,52 @@ +2013-01-21 Martin Jambor + + PR middle-end/56022 + * function.c (allocate_struct_function): Call + invoke_set_current_function_hook earlier. + + * gcc.target/i386/pr56022.c: New test. + +--- gcc/function.c ++++ gcc/function.c +@@ -4479,7 +4479,6 @@ get_last_funcdef_no (void) + void + allocate_struct_function (tree fndecl, bool abstract_p) + { +- tree result; + tree fntype = fndecl ? TREE_TYPE (fndecl) : NULL_TREE; + + cfun = ggc_alloc_cleared_function (); +@@ -4498,8 +4497,13 @@ allocate_struct_function (tree fndecl, b + DECL_STRUCT_FUNCTION (fndecl) = cfun; + cfun->decl = fndecl; + current_function_funcdef_no = get_next_funcdef_no (); ++ } ++ ++ invoke_set_current_function_hook (fndecl); + +- result = DECL_RESULT (fndecl); ++ if (fndecl != NULL_TREE) ++ { ++ tree result = DECL_RESULT (fndecl); + if (!abstract_p && aggregate_value_p (result, fndecl)) + { + #ifdef PCC_STATIC_STRUCT_RETURN +@@ -4518,8 +4522,6 @@ allocate_struct_function (tree fndecl, b + but is this worth the hassle? */ + cfun->can_throw_non_call_exceptions = flag_non_call_exceptions; + } +- +- invoke_set_current_function_hook (fndecl); + } + + /* This is like allocate_struct_function, but pushes a new cfun for FNDECL +--- gcc/testsuite/gcc.target/i386/pr56022.c ++++ gcc/testsuite/gcc.target/i386/pr56022.c +@@ -0,0 +1,7 @@ ++/* { dg-do compile } */ ++/* { dg-options "-mavx" } */ ++ ++typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__)); ++__attribute__((target("no-avx"))) static int currentImplementationSupported() ++{} ++__m256 foo0(__m256 a) {}