On Fri, May 25, 2018 at 4:48 AM, H.J. Lu <hongjiu...@intel.com> wrote: > On Thu, May 24, 2018 at 04:43:25AM -0700, H.J. Lu wrote: >> Since ifunc_resolver is only valid on FUNCTION_DECL, check ifunc_resolver >> only on FUNCTION_DECL. >> >> Please test it on Darwin. >> >> >> H.J. >> --- >> PR target/85900 >> PR target/85345 >> * varasm.c (assemble_alias): Check ifunc_resolver only on >> FUNCTION_DECL. >> --- >> gcc/varasm.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/gcc/varasm.c b/gcc/varasm.c >> index 3bd9cbb69f0..bff43450a91 100644 >> --- a/gcc/varasm.c >> +++ b/gcc/varasm.c >> @@ -5917,7 +5917,8 @@ assemble_alias (tree decl, tree target) >> # else >> if (!DECL_WEAK (decl)) >> { >> - if (cgraph_node::get (decl)->ifunc_resolver) >> + if (TREE_CODE (decl) == FUNCTION_DECL >> + && cgraph_node::get (decl)->ifunc_resolver) >> error_at (DECL_SOURCE_LOCATION (decl), >> "ifunc is not supported in this configuration"); >> else >> -- > > Please test it on Darwin. > > H.J. > --- > Since ifunc_resolver isn't set when an error is detected, we should > lookup ifunc attribute in this case. > > PR target/85900 > PR target/85345 > * varasm.c (assemble_alias): Lookup ifunc attribute on error. > --- > gcc/varasm.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/varasm.c b/gcc/varasm.c > index 6b9f87b203f..4d332f50270 100644 > --- a/gcc/varasm.c > +++ b/gcc/varasm.c > @@ -5917,8 +5917,9 @@ assemble_alias (tree decl, tree target) > # else > if (!DECL_WEAK (decl)) > { > + /* NB: ifunc_resolver isn't set when an error is detected. */ > if (TREE_CODE (decl) == FUNCTION_DECL > - && cgraph_node::get (decl)->ifunc_resolver) > + && lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl))) > error_at (DECL_SOURCE_LOCATION (decl), > "ifunc is not supported in this configuration"); > else > -- > 2.17.0 >
Dominique verified that it fixed all Darwin issues. I am checking it in. -- H.J.