Message ID | 20210318183450.382039-1-polacek@redhat.com |
---|---|
State | New |
Headers | show |
Series | [pushed] c++: Add assert to tsubst. | expand |
On Thu, Mar 18, 2021 at 11:35 AM Marek Polacek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > As discussed in the r11-7709 patch, we can now make sure that tsubst > never sees a FLOAT_EXPR, much like its counterpart FIX_TRUNC_EXPR. > > Tested x86_64-pc-linux-gnu, applying to trunk. > > gcc/cp/ChangeLog: > > * pt.c (tsubst_copy_and_build): Add assert. > --- > gcc/cp/pt.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c > index 5e485f10d19..ea530ef36f4 100644 > --- a/gcc/cp/pt.c > +++ b/gcc/cp/pt.c > @@ -19770,6 +19770,8 @@ tsubst_copy_and_build (tree t, > complain|decltype_flag)); > > case FIX_TRUNC_EXPR: > + case FLOAT_EXPR: > + /* convert_like should have created an IMPLICIT_CONV_EXPR. */ > gcc_unreachable (); > > case ADDR_EXPR: > > base-commit: 55308fc26318427c1438cecc60ddd7ba24d5cd33 > -- > 2.30.2 > This may have caused: https://gcc.gnu.org/pipermail/gcc-regression/2021-March/074461.html FAIL: g++.dg/torture/pr85013.C -O0 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O0 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O0 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O0 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O0 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O0 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O0 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O0 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O0 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O1 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O1 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O1 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O1 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O1 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O1 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O1 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O1 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O1 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O2 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O2 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O2 (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O3 -g (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O3 -g (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O3 -g (internal compiler error) FAIL: g++.dg/torture/pr85013.C -O3 -g (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O3 -g (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O3 -g (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -O3 -g (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O3 -g (test for excess errors) FAIL: g++.dg/torture/pr85013.C -O3 -g (test for excess errors) FAIL: g++.dg/torture/pr85013.C -Os (internal compiler error) FAIL: g++.dg/torture/pr85013.C -Os (internal compiler error) FAIL: g++.dg/torture/pr85013.C -Os (internal compiler error) FAIL: g++.dg/torture/pr85013.C -Os (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -Os (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -Os (test for errors, line 3) FAIL: g++.dg/torture/pr85013.C -Os (test for excess errors) FAIL: g++.dg/torture/pr85013.C -Os (test for excess errors) FAIL: g++.dg/torture/pr85013.C -Os (test for excess errors)
On Thu, Mar 18, 2021 at 02:04:59PM -0700, H.J. Lu wrote: > On Thu, Mar 18, 2021 at 11:35 AM Marek Polacek via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > As discussed in the r11-7709 patch, we can now make sure that tsubst > > never sees a FLOAT_EXPR, much like its counterpart FIX_TRUNC_EXPR. > > > > Tested x86_64-pc-linux-gnu, applying to trunk. > > > > gcc/cp/ChangeLog: > > > > * pt.c (tsubst_copy_and_build): Add assert. > > --- > > gcc/cp/pt.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c > > index 5e485f10d19..ea530ef36f4 100644 > > --- a/gcc/cp/pt.c > > +++ b/gcc/cp/pt.c > > @@ -19770,6 +19770,8 @@ tsubst_copy_and_build (tree t, > > complain|decltype_flag)); > > > > case FIX_TRUNC_EXPR: > > + case FLOAT_EXPR: > > + /* convert_like should have created an IMPLICIT_CONV_EXPR. */ > > gcc_unreachable (); > > > > case ADDR_EXPR: > > > > base-commit: 55308fc26318427c1438cecc60ddd7ba24d5cd33 > > -- > > 2.30.2 > > > > This may have caused: > > https://gcc.gnu.org/pipermail/gcc-regression/2021-March/074461.html > > FAIL: g++.dg/torture/pr85013.C -O0 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O0 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O0 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O0 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O0 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O0 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O0 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O0 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O0 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O1 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O1 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O1 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O1 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O1 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O1 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O1 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O1 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O1 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O2 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O2 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O2 (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O3 -g (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O3 -g (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O3 -g (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -O3 -g (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O3 -g (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O3 -g (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -O3 -g (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O3 -g (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -O3 -g (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -Os (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -Os (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -Os (internal compiler error) > FAIL: g++.dg/torture/pr85013.C -Os (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -Os (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -Os (test for errors, line 3) > FAIL: g++.dg/torture/pr85013.C -Os (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -Os (test for excess errors) > FAIL: g++.dg/torture/pr85013.C -Os (test for excess errors) Strange, it passes for me: $ ./cc1plus -quiet pr85013.C -std=c++14 -fconcepts pr85013.C:3:2: error: expected constructor, destructor, or type conversion before ‘(’ token 3 | a(decltype((0 > 1e91 && 1e31 && (auto)))); // { dg-error "expected" } | ^ ... aha, it needs -fchecking=2: pr85013.C:3:15: internal compiler error: in tsubst_copy_and_build, at cp/pt.c:19775 3 | a(decltype((0 > 1e91 && 1e31 && (auto)))); // { dg-error "expected" } | ~~^~~~~~ 0xd46cf2 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/mpolacek/src/gcc/gcc/cp/pt.c:19775 0xd46f1a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/mpolacek/src/gcc/gcc/cp/pt.c:19829 0xd46f1a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) /home/mpolacek/src/gcc/gcc/cp/pt.c:19829 I guess I'll just remove the new case then :/. Marek
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5e485f10d19..ea530ef36f4 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -19770,6 +19770,8 @@ tsubst_copy_and_build (tree t, complain|decltype_flag)); case FIX_TRUNC_EXPR: + case FLOAT_EXPR: + /* convert_like should have created an IMPLICIT_CONV_EXPR. */ gcc_unreachable (); case ADDR_EXPR: