diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-05-29 23:33:18 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-05-29 23:33:18 +0200 |
commit | 874f88c43bc504d49228f53365d2fd565077ecdd (patch) | |
tree | d6f4d801970651ac576e1130faee49a64d65bf5f | |
parent | 1585b483236dc2e9a9460a11c14cf3b32a967a84 (diff) | |
download | gcc-874f88c43bc504d49228f53365d2fd565077ecdd.zip gcc-874f88c43bc504d49228f53365d2fd565077ecdd.tar.gz gcc-874f88c43bc504d49228f53365d2fd565077ecdd.tar.bz2 |
re PR c++/90598 (Return type of explicit destructor call wrong)
PR c++/90598
* tree.c (lvalue_kind): Return clk_none for expressions with
with VOID_TYPE_P.
* g++.dg/cpp0x/pr90598.C: New test.
From-SVN: r271752
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/tree.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr90598.C | 16 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ee7eab0..647dd7d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-05-29 Jakub Jelinek <jakub@redhat.com> + + PR c++/90598 + * tree.c (lvalue_kind): Return clk_none for expressions with + with VOID_TYPE_P. + 2019-05-29 Paolo Carlini <paolo.carlini@oracle.com> PR c++/89875 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 7813932..cd021b7 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -83,6 +83,10 @@ lvalue_kind (const_tree ref) if (ref == current_class_ptr) return clk_none; + /* Expressions with cv void type are prvalues. */ + if (TREE_TYPE (ref) && VOID_TYPE_P (TREE_TYPE (ref))) + return clk_none; + switch (TREE_CODE (ref)) { case SAVE_EXPR: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a0e8b7b..b8fdc2f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-05-29 Jakub Jelinek <jakub@redhat.com> + + PR c++/90598 + * g++.dg/cpp0x/pr90598.C: New test. + 2019-05-29 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/90539 diff --git a/gcc/testsuite/g++.dg/cpp0x/pr90598.C b/gcc/testsuite/g++.dg/cpp0x/pr90598.C new file mode 100644 index 0000000..2e77444 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr90598.C @@ -0,0 +1,16 @@ +// PR c++/90598 +// { dg-do compile { target c++11 } } + +struct A {}; +using B = decltype(A ().~A ()); +template <typename T> struct C; +template <> struct C<void> {}; +C<B> t; +// PR c++/90598 +// { dg-do compile { target c++11 } } + +struct A {}; +using B = decltype(A ().~A ()); +template <typename T> struct C; +template <> struct C<void> {}; +C<B> t; |