+2019-01-02 Jan Hubicka <hubicka@ucw.cz>
+
+ PR lto/88130
+ * varpool.c (varpool_node::ctor_useable_for_folding_p): Also return
+ false at WPA time when body was removed.
+
2019-01-02 Martin Liska <mliska@suse.cz>
PR tree-optimization/88650
+2019-01-02 Jan Hubicka <hubicka@ucw.cz>
+
+ PR lto/88130
+ * g++.dg/torture/pr88130.C: New testcase.
+
2019-01-02 Martin Liska <mliska@suse.cz>
PR tree-optimization/88650
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-flto" } */
+/* { dg-require-effective-target lto } */
+class a {
+public:
+ static const long b = 1;
+};
+struct c {
+ enum d { e };
+};
+class C;
+class f {
+public:
+ f(c::d);
+ template <typename g> C operator<=(g);
+};
+class C {
+public:
+ template <typename h> void operator!=(h &);
+};
+void i() {
+ f j(c::e);
+ try {
+ j <= 0 != a::b;
+ } catch (...) {
+ }
+}
if (TREE_THIS_VOLATILE (decl))
return false;
+ /* Avoid attempts to load constructors that was not streamed. */
+ if (in_lto_p && DECL_INITIAL (real_node->decl) == error_mark_node
+ && real_node->body_removed)
+ return false;
+
/* If we do not have a constructor, we can't use it. */
if (DECL_INITIAL (real_node->decl) == error_mark_node
&& !real_node->lto_file_data)
return false;
- /* Avoid attempts to load constructors that was not streamed. */
- if (flag_ltrans && DECL_INITIAL (real_node->decl) == error_mark_node
- && real_node->body_removed)
- return false;
-
/* Vtables are defined by their types and must match no matter of interposition
rules. */
if (DECL_VIRTUAL_P (decl))