This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Error about alias attribute with body definition (PR c/87483).


> Hi.
> 
> That's new warnings that warns about ifunc having a function body.
> It provides following warning:
> 
> /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/pr87483.c: In function ‘g’:
> /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/pr87483.c:5:35: warning: ‘alias’ attribute ignored because function is defined [-Wattributes]
> 5 | __attribute__ ((alias ("f"))) int g () { return 1; } /* { dg-warning "attribute ignored because function is defined" } */
>   |                                   ^
> 
> Hope I found proper place in cgraphunit.c for the warning.
> Patch survives bootstrap and tests on x86_64-linux-gnu.
> 
> Ready for trunk?

I think one can first define the function and later declare it again
with additional attribute.  I think it is better to take care of this
in process_function_and_variable_attributes

Honza
> Martin
> 
> gcc/ChangeLog:
> 
> 2018-10-03  Martin Liska  <mliska@suse.cz>
> 
> 	PR c/87483
> 	* cgraphunit.c (cgraph_node::finalize_function):
> 	Print error for functions with alias attribute and
> 	body.
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-10-03  Martin Liska  <mliska@suse.cz>
> 
> 	PR c/87483
> 	* gcc.dg/pr87483.c: New test.
> ---
>  gcc/cgraphunit.c               |  6 ++++++
>  gcc/testsuite/gcc.dg/pr87483.c | 16 ++++++++++++++++
>  2 files changed, 22 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.dg/pr87483.c
> 
> 

> diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
> index c0baaeaefa4..40d6d348214 100644
> --- a/gcc/cgraphunit.c
> +++ b/gcc/cgraphunit.c
> @@ -488,6 +488,12 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
>    if (!TREE_ASM_WRITTEN (decl))
>      (*debug_hooks->deferred_inline_function) (decl);
>  
> +  if (lookup_attribute ("alias", DECL_ATTRIBUTES (decl))
> +      && node->definition)
> +    warning_at (DECL_SOURCE_LOCATION (node->decl), OPT_Wattributes,
> +		"%<alias%> attribute ignored"
> +		" because function is defined");
> +
>    if (!no_collect)
>      ggc_collect ();
>  
> diff --git a/gcc/testsuite/gcc.dg/pr87483.c b/gcc/testsuite/gcc.dg/pr87483.c
> new file mode 100644
> index 00000000000..d3af8dfee5d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr87483.c
> @@ -0,0 +1,16 @@
> +/* PR c/87483 */
> +/* { dg-require-alias "" } */
> +
> +int f (void) { return 0; }
> +__attribute__ ((alias ("f"))) int g () { return 1; } /* { dg-warning "attribute ignored because function is defined" } */
> +__attribute__ ((alias ("f"))) int g2 ();
> +
> +int h (void)
> +{
> +  return g2 ();
> +}
> +
> +int main()
> +{
> +  return h();
> +}
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]