]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/69077 (omnetpp ICEs with -flto -g)
authorRichard Biener <rguenther@suse.de>
Tue, 12 Jan 2016 14:22:40 +0000 (14:22 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 12 Jan 2016 14:22:40 +0000 (14:22 +0000)
2016-01-12  Richard Biener  <rguenther@suse.de>

PR lto/69077
lto/
* lto-symtab.c (lto_symtab_prevailing_virtual_decl): Properly
merge TREE_ADDRESSABLE and DECL_POSSIBLY_INLINED flags.

* g++.dg/lto/pr69077_0.C: New testcase.
* g++.dg/lto/pr69077_1.C: Likewise.

From-SVN: r232272

gcc/lto/ChangeLog
gcc/lto/lto-symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/pr69077_0.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lto/pr69077_1.C [new file with mode: 0644]

index 8d5d2782db8820e6e39a25fc87b1cf72b5e1465b..352fe17eecbd1eeb99273bd30b2da3d6e2fe4d70 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-12  Richard Biener  <rguenther@suse.de>
+
+       PR lto/69077
+       * lto-symtab.c (lto_symtab_prevailing_virtual_decl): Properly
+       merge TREE_ADDRESSABLE and DECL_POSSIBLY_INLINED flags.
+
 2016-01-04  Jakub Jelinek  <jakub@redhat.com>
 
        Update copyright years.
index 3936916d873471fa892f9217af3981da885cf62b..a6f6d01dda12446d015cfc13ebc1f214111bcedf 100644 (file)
@@ -997,6 +997,18 @@ lto_symtab_prevailing_virtual_decl (tree decl)
     n = n->next_sharing_asm_name;
   if (n)
     {
+      /* Merge decl state in both directions, we may still end up using
+        the other decl.  */
+      TREE_ADDRESSABLE (n->decl) |= TREE_ADDRESSABLE (decl);
+      TREE_ADDRESSABLE (decl) |= TREE_ADDRESSABLE (n->decl);
+
+      if (TREE_CODE (decl) == FUNCTION_DECL)
+       {
+         /* Merge decl state in both directions, we may still end up using
+            the other decl.  */
+         DECL_POSSIBLY_INLINED (n->decl) |= DECL_POSSIBLY_INLINED (decl);
+         DECL_POSSIBLY_INLINED (decl) |= DECL_POSSIBLY_INLINED (n->decl);
+       }
       lto_symtab_prevail_decl (n->decl, decl);
       decl = n->decl;
     }
index 3ac04575ed5286992594e9a85ade131ee0573f04..98ac65044eb57556129b6531013848323a6eb910 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-12  Richard Biener  <rguenther@suse.de>
+
+       PR lto/69077
+       * g++.dg/lto/pr69077_0.C: New testcase.
+       * g++.dg/lto/pr69077_1.C: Likewise.
+
 2016-01-12  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/69175
diff --git a/gcc/testsuite/g++.dg/lto/pr69077_0.C b/gcc/testsuite/g++.dg/lto/pr69077_0.C
new file mode 100644 (file)
index 0000000..6a81d0e
--- /dev/null
@@ -0,0 +1,14 @@
+// { dg-lto-do link }
+// { dg-lto-options { { -O3 -g -flto } } }
+// { dg-extra-ld-options "-r -nostdlib" }
+
+struct cStdDev
+{
+  long ns;
+  virtual double mean() const {  return ns;  }
+};
+
+struct cWeightedStdDev : public cStdDev {
+    virtual int netPack();
+};
+int cWeightedStdDev::netPack() { }
diff --git a/gcc/testsuite/g++.dg/lto/pr69077_1.C b/gcc/testsuite/g++.dg/lto/pr69077_1.C
new file mode 100644 (file)
index 0000000..2173b6c
--- /dev/null
@@ -0,0 +1,15 @@
+struct cStdDev
+{
+  long ns;
+  virtual double mean() const {  return ns;  }
+};
+
+struct sf
+{
+  void recordScalar(double value);
+  cStdDev eedStats;
+  virtual void finish();
+};
+void sf::finish() {
+    recordScalar(eedStats.mean());
+}