aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2019-02-05 21:30:51 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2019-02-05 21:30:51 +0000
commit0d806438807541d31a759f687279e704ad103609 (patch)
treea954187353070a2b08aa7342f80baed4a15c1079 /gcc
parentb81e1cd506ad06e4eb0a658d26119129d110a5a9 (diff)
downloadgcc-0d806438807541d31a759f687279e704ad103609.zip
gcc-0d806438807541d31a759f687279e704ad103609.tar.gz
gcc-0d806438807541d31a759f687279e704ad103609.tar.bz2
PR c++/89158 - by-value capture of constexpr variable broken.
* call.c (convert_like_real) <case ck_user>: Call mark_exp_read instead of mark_rvalue_use. * g++.dg/cpp0x/lambda/lambda-89158.C: New test. From-SVN: r268561
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89158.C11
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 65a850f..8ebbc12 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-05 Marek Polacek <polacek@redhat.com>
+
+ PR c++/89158 - by-value capture of constexpr variable broken.
+ * call.c (convert_like_real) <case ck_user>: Call mark_exp_read
+ instead of mark_rvalue_use.
+
2019-02-05 Alexandre Oliva <aoliva@redhat.com>
PR c++/87770
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index c74d1b4..18b8138 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -7006,7 +7006,9 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
return expr;
}
- expr = mark_rvalue_use (expr);
+ /* We don't know here whether EXPR is being used as an lvalue or
+ rvalue, but we know it's read. */
+ mark_exp_read (expr);
/* Pass LOOKUP_NO_CONVERSION so rvalue/base handling knows not to allow
any more UDCs. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 68ce1a4..71ea366 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-02-05 Marek Polacek <polacek@redhat.com>
+
+ PR c++/89158 - by-value capture of constexpr variable broken.
+ * g++.dg/cpp0x/lambda/lambda-89158.C: New test.
+
2019-02-05 Segher Boessenkool <segher@kernel.crashing.org>
* gcc.dg/vect/pr84711.c: Use -Wno-psabi.
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89158.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89158.C
new file mode 100644
index 0000000..15f15b4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89158.C
@@ -0,0 +1,11 @@
+// PR c++/89158
+// { dg-do compile { target c++11 } }
+
+struct T { T(const int&); };
+void Func(T);
+
+void test()
+{
+ constexpr int Val = 42;
+ [Val]() { Func(Val); };
+}