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) {}