From a50e9b2f5d4be81e7da7cf55e6ade4c6c575de03 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Fri, 22 Dec 2017 18:03:16 +0100 Subject: [PATCH] [PR 82027] Also stream opt_info of former_clones 2017-12-22 Martin Jambor PR lto/82027 * lto-cgraph.c (output_cgraph_opt_summary_p): Also check former clones. testsuite/ * g++.dg/lto/pr82027_0.C: New test. From-SVN: r255978 --- gcc/ChangeLog | 6 +++ gcc/lto-cgraph.c | 2 +- gcc/testsuite/ChangeLog | 5 ++ gcc/testsuite/g++.dg/lto/pr82027_0.C | 73 ++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/lto/pr82027_0.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 084718852be..fed24f776d5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-12-22 Martin Jambor + + PR lto/82027 + * lto-cgraph.c (output_cgraph_opt_summary_p): Also check former + clones. + 2017-12-22 Julia Koval Sebastian Peryt diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c index a19f8a13dfb..ed3df15b143 100644 --- a/gcc/lto-cgraph.c +++ b/gcc/lto-cgraph.c @@ -1958,7 +1958,7 @@ input_offload_tables (bool do_force_output) static int output_cgraph_opt_summary_p (struct cgraph_node *node) { - return (node->clone_of + return ((node->clone_of || node->former_clone_of) && (node->clone.tree_map || node->clone.args_to_skip || node->clone.combined_args_to_skip)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fb9c339ea3f..209d4fc7e55 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-12-22 Martin Jambor + + PR lto/82027 + * g++.dg/lto/pr82027_0.C: New test. + 2017-12-22 Julia Koval Sebastian Peryt diff --git a/gcc/testsuite/g++.dg/lto/pr82027_0.C b/gcc/testsuite/g++.dg/lto/pr82027_0.C new file mode 100644 index 00000000000..70cc776b2db --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr82027_0.C @@ -0,0 +1,73 @@ +// { dg-lto-do run } +// { dg-lto-options { { -O3 -flto } } } + +class Position +{ + public: + Position( void ) {} + virtual ~Position() {} + + virtual void calcPercent( const char *name,int pos,int size ) {} +}; + + +class Looper +{ + public: + Looper( Position *cc,int size ) + : m_cc(cc), m_size(size) {} + virtual ~Looper() {} + + void loop( void ) + { + for( int pos=0; poscalcPercent( "",pos,m_size ); + } + } + + private: + Position *m_cc; + int m_size; +}; + + +class EmptyClass +{ + public: + EmptyClass( void ) {} + virtual ~EmptyClass() {} +}; + + +class Combined : public EmptyClass, public Position +{ + public: + Combined( void ) : m_percent(0) {} + ~Combined() {} + + void calcPercent( const char *name,int pos,int size ) + { + int percent = 100*pos/size; + if( percent!=m_percent ) + m_percent = percent; + } + + private: + int m_percent; +}; + + + +int main( int argc,char **argv ) +{ + Combined *comb = new Combined(); + Looper *looper = new Looper( comb,argc ); + + looper->loop(); + + delete comb; + delete looper; + + return( 0 ); +} -- 2.30.2