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
> <[email protected]> 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