@@ -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;
}
}
new file mode 100644
@@ -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;