diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2014-04-17 04:22:57 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2014-04-17 02:22:57 +0000 |
commit | 789c274118d76ab0aab936c51e62a792bab3ab98 (patch) | |
tree | e83569f9f053202fd911a7bd3c28f928d43fec95 | |
parent | 9950a4f2121966e72c27406d7eeb4dc55b8e2eec (diff) | |
download | gcc-789c274118d76ab0aab936c51e62a792bab3ab98.zip gcc-789c274118d76ab0aab936c51e62a792bab3ab98.tar.gz gcc-789c274118d76ab0aab936c51e62a792bab3ab98.tar.bz2 |
re PR ipa/60854 (inline constructor of extern template)
PR ipa/60854
* ipa.c (symtab_remove_unreachable_nodes): Mark targets of
external aliases alive, too.
* g++.dg/torture/pr60854.C: New testcase.
From-SVN: r209459
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr60854.C | 13 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ef1da88..5cff60e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-04-16 Jan Hubicka <hubicka@ucw.cz> + + PR ipa/60854 + * ipa.c (symtab_remove_unreachable_nodes): Mark targets of + external aliases alive, too. + 2014-04-16 Andrew Pinski <apinski@cavium.com> * config/host-linux.c (TRY_EMPTY_VM_SPACE): Change aarch64 ilp32 @@ -415,7 +415,18 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file) || !DECL_EXTERNAL (e->callee->decl) || e->callee->alias || before_inlining_p)) - pointer_set_insert (reachable, e->callee); + { + /* Be sure that we will not optimize out alias target + body. */ + if (DECL_EXTERNAL (e->callee->decl) + && e->callee->alias + && before_inlining_p) + { + pointer_set_insert (reachable, + cgraph_function_node (e->callee)); + } + pointer_set_insert (reachable, e->callee); + } enqueue_node (e->callee, &first, reachable); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b83cd4..de911fd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-04-16 Jan Hubicka <hubicka@ucw.cz> + + PR ipa/60854 + * g++.dg/torture/pr60854.C: New testcase. + 2014-04-16 Catherine Moore <clm@codesourcery.com> * gcc.target/mips/umips-store16-2.c: New test. diff --git a/gcc/testsuite/g++.dg/torture/pr60854.C b/gcc/testsuite/g++.dg/torture/pr60854.C new file mode 100644 index 0000000..fa4b2e7 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr60854.C @@ -0,0 +1,13 @@ +template <typename T> +class MyClass +{ +public: + __attribute__ ((__always_inline__)) inline MyClass () { ; } +}; + +extern template class MyClass<double>; + +void Func() +{ + MyClass<double> x; +} |