diff options
author | Jason Merrill <jason@redhat.com> | 2021-02-11 22:01:19 -0500 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2021-03-02 23:20:43 -0500 |
commit | f8e7f3f3f33e22721a28772cc3f9b616e48cd1c9 (patch) | |
tree | 93dc6074a803b49d2badf428cce3d7e4a8e5378f /gcc/cgraph.h | |
parent | 9b2084db9f9917eb9b19b1eb5ec03cdcb05f349e (diff) | |
download | gcc-f8e7f3f3f33e22721a28772cc3f9b616e48cd1c9.zip gcc-f8e7f3f3f33e22721a28772cc3f9b616e48cd1c9.tar.gz gcc-f8e7f3f3f33e22721a28772cc3f9b616e48cd1c9.tar.bz2 |
cgraph: flatten and same_body aliases [PR96078]
The patch for PR92372 made us start warning about a flatten attribute on an
alias. But in the case of C++ 'tor base/complete variants, the user didn't
create the alias. If the alias target also has the attribute, the alias
points to a flattened function, so we shouldn't warn.
gcc/ChangeLog:
PR c++/96078
* cgraphunit.c (process_function_and_variable_attributes): Don't
warn about flatten on an alias if the target also has it.
* cgraph.h (symtab_node::get_alias_target_tree): New.
gcc/testsuite/ChangeLog:
PR c++/96078
* g++.dg/ext/attr-flatten1.C: New test.
Diffstat (limited to 'gcc/cgraph.h')
-rw-r--r-- | gcc/cgraph.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 47b5c02..4a1f899 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -319,6 +319,9 @@ public: /* Return node that alias is aliasing. */ inline symtab_node *get_alias_target (void); + /* Return DECL that alias is aliasing. */ + inline tree get_alias_target_tree (); + /* Set section for symbol and its aliases. */ void set_section (const char *section); @@ -2665,6 +2668,17 @@ symtab_node::get_alias_target (void) return ref->referred; } +/* Return the DECL (or identifier) that alias is aliasing. Unlike the above, + this works whether or not the alias has been analyzed already. */ + +inline tree +symtab_node::get_alias_target_tree () +{ + if (alias_target) + return alias_target; + return get_alias_target ()->decl; +} + /* Return next reachable static symbol with initializer after the node. */ inline symtab_node * |