Revert one more symbol_summary::get to ::get_create (PR ipa/86529).
authorMartin Liska <mliska@suse.cz>
Mon, 16 Jul 2018 13:33:23 +0000 (15:33 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 16 Jul 2018 13:33:23 +0000 (13:33 +0000)
2018-07-16  Martin Liska  <mliska@suse.cz>

        PR ipa/86529
* ipa-pure-const.c (malloc_candidate_p): Revert ::get
        to ::get_create.
2018-07-16  Martin Liska  <mliska@suse.cz>

        PR ipa/86529
* g++.dg/ipa/pr86529.C: New test.

From-SVN: r262695

gcc/ChangeLog
gcc/ipa-pure-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ipa/pr86529.C [new file with mode: 0644]

index a0f3c523e47d616c60c187350c54bfdf02f9f3da..41ea59b7aef9bca6426223cf9693c437bfde8eb7 100644 (file)
@@ -1,3 +1,9 @@
+2018-07-16  Martin Liska  <mliska@suse.cz>
+
+        PR ipa/86529
+       * ipa-pure-const.c (malloc_candidate_p): Revert ::get
+        to ::get_create.
+
 2017-07-16  Claudiu Zissulescu  <claziss@synopsys.com>
 
        * config/arc/arcHS.md: Update ARCHS scheduling rules.
index dede783bd5f00f3144bb5f71772663267ca6981a..a9a8863d907627908f37b5c5de3961fc14e3f10f 100644 (file)
@@ -958,8 +958,7 @@ malloc_candidate_p (function *fun, bool ipa)
              cgraph_edge *cs = node->get_edge (call_stmt);
              if (cs)
                {
-                 ipa_call_summary *es = ipa_call_summaries->get (cs);
-                 gcc_assert (es);
+                 ipa_call_summary *es = ipa_call_summaries->get_create (cs);
                  es->is_return_callee_uncaptured = true;
                }
            }
index cdbc0b85cc012c7fd5f62ce48eec9197487677dc..a4053c9b12720d8d722d1eabf109cb9a11f5a421 100644 (file)
@@ -1,3 +1,8 @@
+2018-07-16  Martin Liska  <mliska@suse.cz>
+
+        PR ipa/86529
+       * g++.dg/ipa/pr86529.C: New test.
+
 2018-07-16  Tom de Vries  <tdevries@suse.de>
 
        PR debug/86455
diff --git a/gcc/testsuite/g++.dg/ipa/pr86529.C b/gcc/testsuite/g++.dg/ipa/pr86529.C
new file mode 100644 (file)
index 0000000..d753295
--- /dev/null
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-fipa-pure-const -std=c++11" }
+
+namespace std {
+class type_info {
+public:
+  bool operator==(type_info);
+};
+class c {
+public:
+  c(int) {}
+  type_info b;
+  virtual void *d() {
+    if (b == typeid(int))
+      return e();
+    return nullptr;
+  }
+  int *e() noexcept;
+};
+class h {
+public:
+  template <typename g, typename f> h(g, f j) { new c(j); }
+};
+class k {
+protected:
+  int n;
+  k() : i(0, n) {}
+  h i;
+};
+class F : k {
+  public:
+  F(int, int) {}
+  template <typename, typename f, typename...> friend F l(const f &);
+};
+template <typename, typename f, typename...> F l(const f &p1) { F x(int(), p1); return x; }
+template <typename> F m() { l<int>(int()); return F(0, 0); }
+class D {
+  F p;
+
+public:
+  D() : p(m<int>()) {}
+};
+} // namespace std
+std::D a;