aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-07-16 15:33:23 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-07-16 13:33:23 +0000
commitc4d0acf8f7af9c0ab1023b1e09cb17ae9b537204 (patch)
tree6bafd6ebfd99c088158e6e7277473321f1f32f5d
parent325a4c6e1100ef4cf88dc007c64d20fe9b9a6c2c (diff)
downloadgcc-c4d0acf8f7af9c0ab1023b1e09cb17ae9b537204.zip
gcc-c4d0acf8f7af9c0ab1023b1e09cb17ae9b537204.tar.gz
gcc-c4d0acf8f7af9c0ab1023b1e09cb17ae9b537204.tar.bz2
Revert one more symbol_summary::get to ::get_create (PR ipa/86529).
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-pure-const.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr86529.C44
4 files changed, 56 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a0f3c52..41ea59b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index dede783..a9a8863 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -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;
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cdbc0b8..a4053c9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..d753295
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr86529.C
@@ -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;