No. Since this is LTO, it's very hard to simplify the big application. Sorry 
for that.

I think Christophe is mentioning the case from g++.dg is reporting the similar 
issue like " type variant differs by TYPE_CXX_ODR_P  ", right?

Thanks,
-Jiangning

> -----Original Message-----
> From: Jan Hubicka <hubi...@ucw.cz>
> Sent: Thursday, June 27, 2019 2:29 PM
> To: JiangNing OS <jiangn...@os.amperecomputing.com>
> Cc: Eric Botcazou <ebotca...@adacore.com>; Christophe Lyon
> <christophe.l...@linaro.org>; gcc Patches <gcc-patches@gcc.gnu.org>;
> Richard Biener <rguent...@suse.de>; d...@dcepelik.cz; Martin Liška
> <mli...@suse.cz>
> Subject: Re: Use ODR for canonical types construction in LTO
> 
> > Hi,
> >
> > This commit
> > https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=272628 is
> > breaking trunk LTO on some real benchmarks, so can it be fixed or
> > reverted? For example,
> 
> Do you have a testcase?
> Honza
> >
> > lto1: error: type variant differs by TYPE_CXX_ODR_P  <record_type
> > 0xffff99943d08 __va_list BLK
> >     size <integer_cst 0xffff99890f60 type <integer_type 0xffff999400a8
> bitsizetype> constant 256>
> >     unit-size <integer_cst 0xffff99891050 type <integer_type 0xffff99940000
> sizetype> constant 32>
> >     align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
> 0xffff99943d08
> >     fields <field_decl 0xffff99960130 __stack
> >         type <pointer_type 0xffff99940fc0 type <void_type 0xffff99940f18 
> > void>
> >             public unsigned DI
> >             size <integer_cst 0xffff99890c00 constant 64>
> >             unit-size <integer_cst 0xffff99890c18 constant 8>
> >             align:64 warn_if_not_align:0 symtab:0 alias-set 7 
> > structural-equality
> >             pointer_to_this <pointer_type 0xffff99b5d740>>
> >         unsigned DI <built-in>:0:0 size <integer_cst 0xffff99890c00 64> 
> > unit-size
> <integer_cst 0xffff99890c18 8>
> >         align:64 warn_if_not_align:0 offset_align 128
> >         offset <integer_cst 0xffff99890c30 constant 0>
> >         bit-offset <integer_cst 0xffff99890c78 constant 0> context
> <record_type 0xffff99943d08 __va_list>
> >         chain <field_decl 0xffff999601c8 __gr_top type <pointer_type
> 0xffff99940fc0>
> >             unsigned DI <built-in>:0:0 size <integer_cst 0xffff99890c00 64> 
> > unit-
> size <integer_cst 0xffff99890c18 8>
> >             align:64 warn_if_not_align:0 offset_align 128 offset 
> > <integer_cst
> 0xffff99890c30 0> bit-offset <integer_cst 0xffff99890c00 64> context
> <record_type 0xffff99943d08 __va_list> chain <field_decl 0xffff99960260
> __vr_top>>>
> >     reference_to_this <reference_type 0xffff99943fa8> chain <type_decl
> > 0xffff99960098 __va_list>>  <record_type 0xffff99c59cd8 va_list cxx-odr-p
> BLK
> >     size <integer_cst 0xffff99890f60 type <integer_type 0xffff999400a8
> bitsizetype> constant 256>
> >     unit-size <integer_cst 0xffff99891050 type <integer_type 0xffff99940000
> sizetype> constant 32>
> >     align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
> 0xffff99943d08
> >     fields <field_decl 0xffff99960130 __stack
> >         type <pointer_type 0xffff99940fc0 type <void_type 0xffff99940f18 
> > void>
> >             public unsigned DI
> >             size <integer_cst 0xffff99890c00 constant 64>
> >             unit-size <integer_cst 0xffff99890c18 constant 8>
> >             align:64 warn_if_not_align:0 symtab:0 alias-set 7 
> > structural-equality
> >             pointer_to_this <pointer_type 0xffff99b5d740>>
> >         unsigned DI <built-in>:0:0 size <integer_cst 0xffff99890c00 64> 
> > unit-size
> <integer_cst 0xffff99890c18 8>
> >         align:64 warn_if_not_align:0 offset_align 128
> >         offset <integer_cst 0xffff99890c30 constant 0>
> >         bit-offset <integer_cst 0xffff99890c78 constant 0> context
> <record_type 0xffff99943d08 __va_list>
> >         chain <field_decl 0xffff999601c8 __gr_top type <pointer_type
> 0xffff99940fc0>
> >             unsigned DI <built-in>:0:0 size <integer_cst 0xffff99890c00 64> 
> > unit-
> size <integer_cst 0xffff99890c18 8>
> >             align:64 warn_if_not_align:0 offset_align 128 offset 
> > <integer_cst
> 0xffff99890c30 0> bit-offset <integer_cst 0xffff99890c00 64> context
> <record_type 0xffff99943d08 __va_list> chain <field_decl 0xffff99960260
> __vr_top>>>
> >     pointer_to_this <pointer_type 0xffff99c59e28> reference_to_this
> > <reference_type 0xffff9a5b0d20>>
> > lto1: internal compiler error: 'verify_type' failed
> > 0xe33e93 verify_type(tree_node const*)
> >         ../../gcc/gcc/tree.c:14655
> > 0x5efc4b lto_fixup_state
> >         ../../gcc/gcc/lto/lto-common.c:2429
> > 0x5fc01b lto_fixup_decls
> >         ../../gcc/gcc/lto/lto-common.c:2460
> > 0x5fc01b read_cgraph_and_symbols(unsigned int, char const**)
> >         ../../gcc/gcc/lto/lto-common.c:2693
> > 0x5ded23 lto_main()
> >         ../../gcc/gcc/lto/lto.c:616
> > Please submit a full bug report,
> > with preprocessed source if appropriate.
> > Please include the complete backtrace with any bug report.
> > See <https://gcc.gnu.org/bugs/> for instructions.
> > lto-wrapper: fatal error: /home/amptest/gcc/install_last//bin/g++
> > returned 1 exit status compilation terminated.
> > /usr/bin/ld: error: lto-wrapper failed
> > collect2: error: ld returned 1 exit status
> >
> > Thanks,
> > -Jiangning
> >
> > > -----Original Message-----
> > > From: gcc-patches-ow...@gcc.gnu.org <gcc-patches-ow...@gcc.gnu.org>
> > > On Behalf Of Christophe Lyon
> > > Sent: Tuesday, June 25, 2019 8:30 PM
> > > To: Jan Hubicka <hubi...@ucw.cz>
> > > Cc: Eric Botcazou <ebotca...@adacore.com>; gcc Patches <gcc-
> > > patc...@gcc.gnu.org>; Richard Biener <rguent...@suse.de>;
> > > d...@dcepelik.cz; Martin Liška <mli...@suse.cz>
> > > Subject: Re: Use ODR for canonical types construction in LTO
> > >
> > > Hi,
> > >
> > >
> > > On Tue, 25 Jun 2019 at 10:20, Jan Hubicka <hubi...@ucw.cz> wrote:
> > > >
> > > > > >     * gcc-interface/decl.c (gnat_to_gnu_entity): Check that
> > > > > >     type is array or integer prior checking string flag.
> > > > >
> > > > > The test for array is superfluous here.
> > > > >
> > > > > >     * gcc-interface/gigi.h (gnat_signed_type_for,
> > > > > >     maybe_character_value): Likewise.
> > > > >
> > > > > Wrong ChangeLog, the first modified function is
> maybe_character_type.
> > > > >
> > > > > I have installed the attached patchlet after testing it on 
> > > > > x86-64/Linux.
> > > > >
> > > > >
> > > > >       * gcc-interface/decl.c (gnat_to_gnu_entity): Remove
> > > > > superfluous test
> > > in
> > > > >       previous change.
> > > > >       * gcc-interface/gigi.h (maybe_character_type): Fix formatting.
> > > > >       (maybe_character_value): Likewise.
> > > >
> > > > Thanks a lot. I was not quite sure if ARRAY_TYPEs can happen there
> > > > and I should have added you to the CC.
> > > >
> > >
> > > After the main commit (r272628), I have noticed regressions on arm
> > > and
> > > aarch64:
> > >
> > >     g++.dg/lto/pr60336 cp_lto_pr60336_0.o-cp_lto_pr60336_0.o link,
> > > -O0 -flto
> > > -flto-partition=1to1 -fno-use-linker-plugin  (internal compiler
> > > error)
> > >     g++.dg/lto/pr60336 cp_lto_pr60336_0.o-cp_lto_pr60336_0.o link,
> > > -O0 -flto -flto-partition=none -fuse-linker-plugin (internal
> > > compiler
> > > error)
> > >     g++.dg/lto/pr60336 cp_lto_pr60336_0.o-cp_lto_pr60336_0.o link,
> > > -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects  (internal
> > > compiler
> > > error)
> > >     g++.dg/lto/pr60336 cp_lto_pr60336_0.o-cp_lto_pr60336_0.o link,
> > > -O2 -flto
> > > -flto-partition=1to1 -fno-use-linker-plugin  (internal compiler
> > > error)
> > >     g++.dg/lto/pr60336 cp_lto_pr60336_0.o-cp_lto_pr60336_0.o link,
> > > -O2 -flto -flto-partition=none -fuse-linker-plugin
> > > -fno-fat-lto-objects (internal compiler
> > > error)
> > >     g++.dg/lto/pr60336 cp_lto_pr60336_0.o-cp_lto_pr60336_0.o link,
> > > -O2 -flto -fuse-linker-plugin (internal compiler error)
> > >     g++.dg/torture/pr45843.C   -O2 -flto -fno-use-linker-plugin
> > > -flto-partition=none  (internal compiler error)
> > >     g++.dg/torture/pr45843.C   -O2 -flto -fuse-linker-plugin
> > > -fno-fat-lto-objects  (internal compiler error)
> > >     g++.dg/torture/stackalign/eh-vararg-1.C   -O2 -flto
> > > -fno-use-linker-plugin -flto-partition=none  (internal compiler error)
> > >     g++.dg/torture/stackalign/eh-vararg-1.C   -O2 -flto
> > > -fno-use-linker-plugin -flto-partition=none -fpic (internal compiler
> > > error)
> > >     g++.dg/torture/stackalign/eh-vararg-1.C   -O2 -flto
> > > -fuse-linker-plugin -fno-fat-lto-objects  (internal compiler error)
> > >     g++.dg/torture/stackalign/eh-vararg-1.C   -O2 -flto
> > > -fuse-linker-plugin -fno-fat-lto-objects -fpic (internal compiler
> > > error)
> > >     g++.dg/torture/stackalign/eh-vararg-2.C   -O2 -flto
> > > -fno-use-linker-plugin -flto-partition=none  (internal compiler error)
> > >     g++.dg/torture/stackalign/eh-vararg-2.C   -O2 -flto
> > > -fno-use-linker-plugin -flto-partition=none -fpic (internal compiler
> > > error)
> > >     g++.dg/torture/stackalign/eh-vararg-2.C   -O2 -flto
> > > -fuse-linker-plugin -fno-fat-lto-objects  (internal compiler error)
> > >     g++.dg/torture/stackalign/eh-vararg-2.C   -O2 -flto
> > > -fuse-linker-plugin -fno-fat-lto-objects -fpic (internal compiler
> > > error)
> > >
> > > A sample ICE:
> > > lto1: error: type variant differs by TYPE_CXX_ODR_P  <record_type
> > > 0x2b3d78275dc8 __va_list BLK
> > >     size <integer_cst 0x2b3d7825cf60 type <integer_type
> > > 0x2b3d782690a8
> > > bitsizetype> constant 256>
> > >     unit-size <integer_cst 0x2b3d78270060 type <integer_type
> > > 0x2b3d78269000 sizetype> constant 32>
> > >     align:64 warn_if_not_align:0 symtab:0 alias-set -1
> > > canonical-type
> > > 0x2b3d78275dc8
> > >     fields <field_decl 0x2b3d78273130 __stack
> > >         type <pointer_type 0x2b3d78271000 type <void_type
> > > 0x2b3d78269f18
> > > void>
> > >             public unsigned DI
> > >             size <integer_cst 0x2b3d7825cc00 constant 64>
> > >             unit-size <integer_cst 0x2b3d7825cc18 constant 8>
> > >             align:64 warn_if_not_align:0 symtab:0 alias-set -1 structural-
> equality
> > >             pointer_to_this <pointer_type 0x2b3d782769d8>>
> > >         unsigned DI <built-in>:0:0 size <integer_cst 0x2b3d7825cc00
> > > 64> unit-size <integer_cst 0x2b3d7825cc18 8>
> > >         align:64 warn_if_not_align:0 offset_align 128
> > >         offset <integer_cst 0x2b3d7825cc30 constant 0>
> > >         bit-offset <integer_cst 0x2b3d7825cc78 constant 0> context
> > > <record_type 0x2b3d78275dc8 __va_list>
> > >         chain <field_decl 0x2b3d782731c8 __gr_top type <pointer_type
> > > 0x2b3d78271000>
> > >             unsigned DI <built-in>:0:0 size <integer_cst
> > > 0x2b3d7825cc00 64> unit-size <integer_cst 0x2b3d7825cc18 8>
> > >             align:64 warn_if_not_align:0 offset_align 128 offset
> > > <integer_cst
> > > 0x2b3d7825cc30 0> bit-offset <integer_cst 0x2b3d7825cc00
> > > 64> context <record_type 0x2b3d78275dc8 __va_list> chain <field_decl
> > > 0x2b3d78273260 __vr_top>>>
> > >     reference_to_this <reference_type 0x2b3d782760a8> chain
> > > <type_decl
> > > 0x2b3d78273098 __va_list>>
> > >  <record_type 0x2b3d783f6930 va_list cxx-odr-p BLK
> > >     size <integer_cst 0x2b3d7825cf60 type <integer_type
> > > 0x2b3d782690a8
> > > bitsizetype> constant 256>
> > >     unit-size <integer_cst 0x2b3d78270060 type <integer_type
> > > 0x2b3d78269000 sizetype> constant 32>
> > >     align:64 warn_if_not_align:0 symtab:0 alias-set -1
> > > canonical-type
> > > 0x2b3d78275dc8
> > >     fields <field_decl 0x2b3d78273130 __stack
> > >         type <pointer_type 0x2b3d78271000 type <void_type
> > > 0x2b3d78269f18
> > > void>
> > >             public unsigned DI
> > >             size <integer_cst 0x2b3d7825cc00 constant 64>
> > >             unit-size <integer_cst 0x2b3d7825cc18 constant 8>
> > >             align:64 warn_if_not_align:0 symtab:0 alias-set -1 structural-
> equality
> > >             pointer_to_this <pointer_type 0x2b3d782769d8>>
> > >         unsigned DI <built-in>:0:0 size <integer_cst 0x2b3d7825cc00
> > > 64> unit-size <integer_cst 0x2b3d7825cc18 8>
> > >         align:64 warn_if_not_align:0 offset_align 128
> > >         offset <integer_cst 0x2b3d7825cc30 constant 0>
> > >         bit-offset <integer_cst 0x2b3d7825cc78 constant 0> context
> > > <record_type 0x2b3d78275dc8 __va_list>
> > >         chain <field_decl 0x2b3d782731c8 __gr_top type <pointer_type
> > > 0x2b3d78271000>
> > >             unsigned DI <built-in>:0:0 size <integer_cst
> > > 0x2b3d7825cc00 64> unit-size <integer_cst 0x2b3d7825cc18 8>
> > >             align:64 warn_if_not_align:0 offset_align 128 offset
> > > <integer_cst
> > > 0x2b3d7825cc30 0> bit-offset <integer_cst 0x2b3d7825cc00
> > > 64> context <record_type 0x2b3d78275dc8 __va_list> chain <field_decl
> > > 0x2b3d78273260 __vr_top>>>
> > >     pointer_to_this <pointer_type 0x2b3d783f69d8>>
> > > lto1: internal compiler error: 'verify_type' failed
> > > 0xe667b0 verify_type(tree_node const*)
> > >         /gcc/tree.c:14650
> > > 0x632cd7 lto_fixup_state
> > >         /gcc/lto/lto-common.c:2429
> > > 0x63f459 lto_fixup_decls
> > >         /gcc/lto/lto-common.c:2460
> > > 0x63f459 read_cgraph_and_symbols(unsigned int, char const**)
> > >         /gcc/lto/lto-common.c:2693
> > > 0x620fa2 lto_main()
> > >         /gcc/lto/lto.c:616
> > > Please submit a full bug report,
> > >
> > > Christophe

Reply via email to