diff options
author | Marek Polacek <polacek@redhat.com> | 2019-02-05 21:30:51 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2019-02-05 21:30:51 +0000 |
commit | 0d806438807541d31a759f687279e704ad103609 (patch) | |
tree | a954187353070a2b08aa7342f80baed4a15c1079 /gcc | |
parent | b81e1cd506ad06e4eb0a658d26119129d110a5a9 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-89158.C | 11 |
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); }; +} |