public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/104172] New: [9/10/11/12 Regression] ppc64le mangling ICE with -flto -ffat-lto-objects
@ 2022-01-21 21:26 jakub at gcc dot gnu.org
  2022-01-21 21:30 ` [Bug target/104172] " jakub at gcc dot gnu.org
                   ` (16 more replies)
  0 siblings, 17 replies; 18+ messages in thread
From: jakub at gcc dot gnu.org @ 2022-01-21 21:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104172

            Bug ID: 104172
           Summary: [9/10/11/12 Regression] ppc64le mangling ICE with
                    -flto -ffat-lto-objects
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

// { dg-do compile { target { powerpc*-*-* && lp64 && le } } }
// { dg-options "-O2 -flto=auto -ffat-lto-objects -mabi=ieeelongdouble" }

struct A { A(int); };
struct B { float b; };
struct C : B { C(); };
C::C() { A(b * 25.4L); }

ICEs
PagePrinter.C: In member function 'C::C()':
PagePrinter.C:7:1: internal compiler error: tree check: expected class 'type',
have 'declaration' (translation_unit_decl) in base_ctor_omit_inherited_parms,
at cp/method.c:568
    7 | C::C() { A(b * 25.4L); }
      | ^
0x101fbd8b tree_class_check_failed(tree_node const*, tree_code_class, char
const*, int, char const*)
        ../../gcc/tree.c:8752
0x104073bf tree_class_check(tree_node*, tree_code_class, char const*, int, char
const*)
        ../../gcc/tree.h:3564
0x104073bf base_ctor_omit_inherited_parms(tree_node*)
        ../../gcc/cp/method.c:568
0x104073bf base_ctor_omit_inherited_parms(tree_node*)
        ../../gcc/cp/method.c:560
0x103eda0b write_method_parms
        ../../gcc/cp/mangle.c:2798
0x103edd73 write_bare_function_type
        ../../gcc/cp/mangle.c:2758
0x103edecf write_encoding
        ../../gcc/cp/mangle.c:832
0x103eec7f mangle_decl_string
        ../../gcc/cp/mangle.c:4034
0x103ef003 get_mangled_id
        ../../gcc/cp/mangle.c:4055
0x103ef003 mangle_decl(tree_node*)
        ../../gcc/cp/mangle.c:4093
0x1142297f rs6000_globalize_decl_name
        ../../gcc/config/rs6000/rs6000.c:28190
0x113d8c43 globalize_decl
        ../../gcc/varasm.c:6146
0x113e112b assemble_start_function(tree_node*, char const*)
        ../../gcc/varasm.c:1965
0x10a01a8f rest_of_handle_final
        ../../gcc/final.c:4281
0x10a01a8f execute
        ../../gcc/final.c:4363
(for GCC configured to default to --with-long-double-format=ieee that is a
pretty serious regression breaking lots of builds).

The bug is in:
/* Create an alias for a mangled name where we have changed the mangling (in
   GCC 8.1, we used U10__float128, and now we use u9__ieee128).  This is called
   via the target hook TARGET_ASM_GLOBALIZE_DECL_NAME.  */

#if TARGET_ELF && RS6000_WEAK
static void
rs6000_globalize_decl_name (FILE * stream, tree decl)
{
  const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);

  targetm.asm_out.globalize_label (stream, name);

  if (rs6000_passes_ieee128 && name[0] == '_' && name[1] == 'Z')
    {
      tree save_asm_name = DECL_ASSEMBLER_NAME (decl);
      const char *old_name;

      ieee128_mangling_gcc_8_1 = true;
      lang_hooks.set_decl_assembler_name (decl);
      old_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
      SET_DECL_ASSEMBLER_NAME (decl, save_asm_name);
      ieee128_mangling_gcc_8_1 = false;

      if (strcmp (name, old_name) != 0)
        {
          fprintf (stream, "\t.weak %s\n", old_name);
          fprintf (stream, "\t.set %s,%s\n", old_name, name);
        }
    }
}
#endif

This is just wrong, mangling is only possible before free_lang_data, not after
that, everything should be mangled by then.
So, IMHO the backend should note that during mangling that it emitted some
u9__ieee128 (when rs6000_mangle_type returns it)
and through some hook should cooperate with the C++ FE to create a mangling
alias like the FE creates mangling aliases for -fabi-version*.

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-01-28 11:51 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-21 21:26 [Bug target/104172] New: [9/10/11/12 Regression] ppc64le mangling ICE with -flto -ffat-lto-objects jakub at gcc dot gnu.org
2022-01-21 21:30 ` [Bug target/104172] " jakub at gcc dot gnu.org
2022-01-21 21:31 ` jakub at gcc dot gnu.org
2022-01-21 21:33 ` jakub at gcc dot gnu.org
2022-01-21 21:45 ` mpolacek at gcc dot gnu.org
2022-01-21 22:00 ` wschmidt at gcc dot gnu.org
2022-01-22 10:39 ` jakub at gcc dot gnu.org
2022-01-22 22:37 ` orion at cora dot nwra.com
2022-01-24  8:59 ` rguenth at gcc dot gnu.org
2022-01-24  9:02 ` jakub at gcc dot gnu.org
2022-01-24 11:57 ` jakub at gcc dot gnu.org
2022-01-24 18:36 ` jakub at gcc dot gnu.org
2022-01-24 23:13 ` jason at gcc dot gnu.org
2022-01-24 23:17 ` wschmidt at gcc dot gnu.org
2022-01-25  0:16 ` segher at gcc dot gnu.org
2022-01-25  4:49 ` cvs-commit at gcc dot gnu.org
2022-01-25 13:57 ` cvs-commit at gcc dot gnu.org
2022-01-28 11:51 ` [Bug target/104172] [9/10 " jakub at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).