diff mbox series

[pushed] c++: Add assert to tsubst.

Message ID 20210318183450.382039-1-polacek@redhat.com
State New
Headers show
Series [pushed] c++: Add assert to tsubst. | expand

Commit Message

Marek Polacek March 18, 2021, 6:34 p.m. UTC
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(+)


base-commit: 55308fc26318427c1438cecc60ddd7ba24d5cd33

Comments

H.J. Lu March 18, 2021, 9:04 p.m. UTC | #1
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)
Marek Polacek March 18, 2021, 9:16 p.m. UTC | #2
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 mbox series

Patch

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: