aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2018-08-26 16:31:27 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2018-08-26 16:31:27 +0000
commit0940fe595548ec397ffdb6c2f8fa4392c1c15ec5 (patch)
tree90bb8b6fb258afc08c62591b88d00a023475219a /gcc
parent376384e4c4ff6fa5f9ec93bc7dc59c5d2a147c04 (diff)
downloadgcc-0940fe595548ec397ffdb6c2f8fa4392c1c15ec5.zip
gcc-0940fe595548ec397ffdb6c2f8fa4392c1c15ec5.tar.gz
gcc-0940fe595548ec397ffdb6c2f8fa4392c1c15ec5.tar.bz2
re PR c++/87080 (ice in cp_get_fndecl_from_callee, at cp/cvt.c:965)
PR c++/87080 * typeck.c (maybe_warn_pessimizing_move): Do nothing in a template. * g++.dg/cpp0x/Wpessimizing-move5.C: New test. From-SVN: r263862
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/Wpessimizing-move5.C14
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ccb771b..258c6a9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2018-08-26 Marek Polacek <polacek@redhat.com>
+
+ PR c++/87080
+ * typeck.c (maybe_warn_pessimizing_move): Do nothing in a template.
+
2018-08-24 Marek Polacek <polacek@redhat.com>
PR c++/67012
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 122d9dc..24647e2 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -9192,6 +9192,11 @@ maybe_warn_pessimizing_move (tree retval, tree functype)
if (cxx_dialect < cxx11)
return;
+ /* Wait until instantiation time, since we can't gauge if we should do
+ the NRVO until then. */
+ if (processing_template_decl)
+ return;
+
/* This is only interesting for class types. */
if (!CLASS_TYPE_P (functype))
return;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 67f4cde..3bd02e7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-08-26 Marek Polacek <polacek@redhat.com>
+
+ PR c++/87080
+ * g++.dg/cpp0x/Wpessimizing-move5.C: New test.
+
2018-08-25 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/86704
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wpessimizing-move5.C b/gcc/testsuite/g++.dg/cpp0x/Wpessimizing-move5.C
new file mode 100644
index 0000000..02ad211
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/Wpessimizing-move5.C
@@ -0,0 +1,14 @@
+// PR c++/87080
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wpessimizing-move" }
+
+struct a {
+ template<typename b> a &operator<<(b);
+};
+a c();
+template<typename>
+a fn2()
+{
+ int d = 42;
+ return c() << d;
+}