public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug modula2/114745] New: const cast causes ICE
@ 2024-04-16 14:11 gaius at gcc dot gnu.org
  2024-04-16 14:29 ` [Bug modula2/114745] " gaius at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-16 14:11 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 114745
           Summary: const cast causes ICE
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: modula2
          Assignee: gaius at gcc dot gnu.org
          Reporter: gaius at gcc dot gnu.org
  Target Milestone: ---

As reported on the gm2 mailing list performing a cast in a const expression
causes an ICE.  The large original example from the mailing list has been
reduced to this smaller example:

MODULE tinyindr ;

FROM SYSTEM IMPORT WORD, BYTE ;

TYPE
   File = RECORD
             lastWord: WORD ;
             lastByte: BYTE ;
          END ;

PROCEDURE Create (VAR f: File) ;
BEGIN
   WITH f DO
      lastWord := WORD (0) ;
      lastByte := BYTE (0)
   END
END Create ;


VAR
   foo: File ;
BEGIN
   Create (foo)
END tinyindr.

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

* [Bug modula2/114745] const cast causes ICE
  2024-04-16 14:11 [Bug modula2/114745] New: const cast causes ICE gaius at gcc dot gnu.org
@ 2024-04-16 14:29 ` gaius at gcc dot gnu.org
  2024-04-16 18:04 ` gaius at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-16 14:29 UTC (permalink / raw)
  To: gcc-bugs

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

Gaius Mulley <gaius at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-04-16

--- Comment #1 from Gaius Mulley <gaius at gcc dot gnu.org> ---
wrong test program (above).  The test which causes the ICE can be reduced to
the example here:

MODULE constcast ;

FROM SYSTEM IMPORT CAST ;

CONST Nil = CAST (PROC, NIL) ;

BEGIN
END constcast.

$ gm2 -fiso constcast.mod
cc1gm2: internal compiler error: symbol out of bounds
0x840837 m2linemap_internal_error
        ../../gcc/m2/gm2-gcc/m2linemap.cc:253
0x90b74b M2Emit_InternalError
        m2/gm2-compiler-boot/M2Emit.c:102
0x86fa8b M2Error_InternalError
        m2/gm2-compiler-boot/M2Error.c:2651
0x8d117b GetPsym
        m2/gm2-compiler-boot/SymbolTable.c:4610
0x8d117b GetPsym
        m2/gm2-compiler-boot/SymbolTable.c:4599
0x8d117b SymbolTable_IsSubrange
        m2/gm2-compiler-boot/SymbolTable.c:18569
0x865587 M2Base_IsOrdinalType
        m2/gm2-compiler-boot/M2Base.c:3195
0x8c05bf TypeToMeta
        m2/gm2-compiler-boot/PCSymBuild.c:1173
0x8c05bf TypeToMeta
        m2/gm2-compiler-boot/PCSymBuild.c:1152
0x8c13d7 buildConstFunction
        m2/gm2-compiler-boot/PCSymBuild.c:1233
0x8c13d7 PCSymBuild_PushConstFunctionType
        m2/gm2-compiler-boot/PCSymBuild.c:2698
0x8f5ebb ConstructorOrConstActualParameters
        m2/gm2-compiler-boot/PCBuild.c:4460
0x8f5ebb ConstSetOrQualidentOrFunction
        m2/gm2-compiler-boot/PCBuild.c:4508
0x8f5ebb ConstFactor
        m2/gm2-compiler-boot/PCBuild.c:4251
0x8f5f3b ConstTerm
        m2/gm2-compiler-boot/PCBuild.c:4085
0x8f6203 UnaryOrConstTerm
        m2/gm2-compiler-boot/PCBuild.c:3977
0x8f6203 SimpleConstExpr
        m2/gm2-compiler-boot/PCBuild.c:3929
0x8f648f ConstExpression
        m2/gm2-compiler-boot/PCBuild.c:3812
0x8f66e7 ConstantDeclaration
        m2/gm2-compiler-boot/PCBuild.c:3772
0x8f925f Declaration
        m2/gm2-compiler-boot/PCBuild.c:7471
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

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

* [Bug modula2/114745] const cast causes ICE
  2024-04-16 14:11 [Bug modula2/114745] New: const cast causes ICE gaius at gcc dot gnu.org
  2024-04-16 14:29 ` [Bug modula2/114745] " gaius at gcc dot gnu.org
@ 2024-04-16 18:04 ` gaius at gcc dot gnu.org
  2024-04-16 22:09 ` cvs-commit at gcc dot gnu.org
  2024-04-17  9:59 ` gaius at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-16 18:04 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Gaius Mulley <gaius at gcc dot gnu.org> ---
Created attachment 57964
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57964&action=edit
Proposed fix

Here is a proposed patch and the example test run:

$ gm2 -fiso -c -I. -I../ Dictionary.mod -fsources
Compiling: Dictionary.mod
Pass 0: lexical analysis, parsing, modules and associated filenames
   Module SYSTEM               :
/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2iso/SYSTEM.def [m2iso]
   Module M2RTS                :
/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2iso/M2RTS.def [m2iso]
   Module RTExceptions         :
/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2pim/RTExceptions.def
[m2pim]
   Module Dictionary           : ./Dictionary.def
   Module Dictionary           : Dictionary.mod
   Module String               : ../String.def
   Module Proc                 : ./Proc.def
   Module Storage              :
/home/gaius/opt/lib/gcc/x86_64-pc-linux-gnu/14.0.1/m2/m2iso/Storage.def [m2iso]
   Module StrBlank             : ./StrBlank.def
Pass 1: scopes, enumerated types, imports and exports
Pass 2: constants and types
Pass C: aggregate constants
Pass 3: quadruple generation
Pass 4: gcc tree generation
        symbols to gcc trees
        statements to gcc trees
        gcc trees given to the gcc backend

$ gm2 -fiso constcast.mod 
$

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

* [Bug modula2/114745] const cast causes ICE
  2024-04-16 14:11 [Bug modula2/114745] New: const cast causes ICE gaius at gcc dot gnu.org
  2024-04-16 14:29 ` [Bug modula2/114745] " gaius at gcc dot gnu.org
  2024-04-16 18:04 ` gaius at gcc dot gnu.org
@ 2024-04-16 22:09 ` cvs-commit at gcc dot gnu.org
  2024-04-17  9:59 ` gaius at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-04-16 22:09 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Gaius Mulley <gaius@gcc.gnu.org>:

https://gcc.gnu.org/g:eadd05d5601063bd0c7ef6c3606b4eeb856d57d7

commit r14-9998-geadd05d5601063bd0c7ef6c3606b4eeb856d57d7
Author: Gaius Mulley <gaiusmod2@gmail.com>
Date:   Tue Apr 16 23:08:43 2024 +0100

    PR modula2/114745: const cast causes ICE

    This patch allows SYSTEM.CAST to be used during a const expression and
    prevents an ICE.

    gcc/m2/ChangeLog:

            PR modula2/114745
            * gm2-compiler/M2Code.mod (DumpLangDecl): Replace with ...
            (GetDumpDecl): ... this.
            (DumpLangGimple): Replace with ...
            (GetDumpGimple): ... this.
            * gm2-compiler/M2GenGCC.mod:
            * gm2-compiler/M2LangDump.mod (GetDumpLangQuadFilename): Replace
with ...
            (GetDumpQuadFilename): ... this.
            (GetDumpLangDeclFilename): Replace with ...
            (GetDumpDeclFilename): ... this.
            (GetDumpLangGimpleFilename): Replace with ...
            (GetDumpGimpleFilename): ... this.
            * gm2-compiler/M2Options.def (GetDumpLangDeclFilename): New
            procedure function.
            (GetDumpDeclFilename): Ditto.
            (SetDumpLangDeclFilename): New procedure.
            (SetDumpDeclFilename): Ditto.
            (GetDumpLangQuadFilename): New procedure function.
            (GetDumpQuadFilename): Ditto
            (SetDumpLangQuadFilename): New procedure.
            (SetDumpQuadFilename): Ditto.
            (GetDumpLangGimpleFilename): New procedure function.
            (GetDumpGimpleFilename): Ditto.
            (SetDumpLangGimpleFilename): New procedure.
            (SetDumpGimpleFilename): Ditto.
            (GetDumpLangGimple): New procedure function.
            (SetM2Dump): New procedure.
            (GetDumpGimple): New procedure function.
            (GetDumpQuad): Ditto.
            (GetDumpDecl): Ditto.
            * gm2-compiler/M2Options.mod (DumpLangDeclFilename): Remove.
            (DumpLangQuadFilename): Ditto.
            (DumpLangGimpleFilename): Ditto.
            (DumpDeclFilename): New variable.
            (DumpQuadFilename): Ditto.
            (DumpGimpleFilename): Ditto.
            (DebugTraceTree): New variable.
            (SetQuadDebugging): Rewrite.
            (GetDumpLangDeclFilename): Replace with ...
            (GetDumpDeclFilename): ... this.
            (SetDumpLangQuadFilename): Replace with ...
            (SetDumpQuadFilename): ... this.
            (GetDumpLangGimpleFilename): Replace with ...
            (GetDumpGimpleFilename): ... this.
            (SetDumpLangGimpleFilename): Replace with ...
            (SetDumpGimpleFilename): ... this.
            (GetDumpLangGimple): Remove.
            (MatchDump): New procedure function.
            (SetM2Dump): New procedure.
            (GetDumpGimple): New procedure function.
            (GetDumpQuad): Ditto.
            (GetDumpDecl): Ditto.
            (GetDumpLangGimple): Ditto.
            * gm2-compiler/M2Quads.mod (BreakAtQuad): Assigned to 140.
            (BuildTypeCoercion): Add ConstExpr parameter.
            Check for const parameter in a const expression.
            Create a constant temporary if in a const expression.
            (BuildCastFunction): Pass ConstExpr to BuildTypeCoercion.
            (BuildFunctionCall): Pass ConstExpr to BuildTypeCoercion.
            * gm2-compiler/PCSymBuild.mod (buildConstFunction): Test for Cast
            and call InitConvert.
            (ErrorConstFunction): Add CAST to the error message.
            * gm2-compiler/SymbolTable.mod (GetConstStringContent): Remove
            unused procedure.
            * gm2-gcc/m2decl.cc (m2decl_DeclareKnownConstant): Copy value
            and change type of value.
            * gm2-gcc/m2options.h (M2Options_GetDumpLangDeclFilename): Remove.
            (M2Options_SetDumpLangDeclFilename): Ditto.
            (M2Options_GetDumpLangQuadFilename): Ditto.
            (M2Options_SetDumpLangQuadFilename): Ditto.
            (M2Options_GetDumpLangGimpleFilename): Ditto.
            (M2Options_SetDumpLangGimpleFilename): Ditto.
            (M2Options_GetDumpLangGimple): Ditto.
            (M2Options_GetDumpDeclFilename): New function.
            (M2Options_SetDumpDeclFilename): Ditto.
            (M2Options_GetDumpQuadFilename): Ditto.
            (M2Options_SetDumpQuadFilename): Ditto.
            (M2Options_GetDumpGimpleFilename): Ditto.
            (M2Options_SetDumpGimpleFilename): Ditto.
            (M2Options_SetM2Dump): Ditto.
            (M2Options_GetDumpGimple): Ditto.
            * gm2-gcc/m2pp.cc (GM2): New define.
            (m2pp_type_lowlevel): Remove linefeed.
            (m2pp_identifier): Add type description for const.
            (m2pp_assignment): Display lhs/rhs types.
            (m2pp_dump_gimple): Replace GetDumpLangGimple with GetDumpGimple.
            * gm2-lang.cc (ENABLE_QUAD_DUMP_ALL): Remove.
            (ENABLE_M2DUMP_ALL): New define.
            (gm2_langhook_handle_option): Remove commented options
            OPT_fdump_lang_all, OPT_fdump_lang_decl_, OPT_fdump_lang_gimple,
            OPT_fdump_lang_gimple_, OPT_fdump_lang_quad and
            OPT_fdump_lang_quad_.
            Add commented options OPT_fm2_dump_, OPT_fm2_dump_decl_,
            OPT_fm2_dump_gimple_ and OPT_fm2_dump_quad_.

    gcc/testsuite/ChangeLog:

            PR modula2/114745
            * gm2/iso/const/pass/constcast.mod: New test.
            * gm2/iso/const/pass/constodd.mod: New test.
            * gm2/pim/pass/tinyindr.mod: New test.

    Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>

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

* [Bug modula2/114745] const cast causes ICE
  2024-04-16 14:11 [Bug modula2/114745] New: const cast causes ICE gaius at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2024-04-16 22:09 ` cvs-commit at gcc dot gnu.org
@ 2024-04-17  9:59 ` gaius at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-17  9:59 UTC (permalink / raw)
  To: gcc-bugs

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

Gaius Mulley <gaius at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #4 from Gaius Mulley <gaius at gcc dot gnu.org> ---
Closing now the patch has been applied.

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

end of thread, other threads:[~2024-04-17  9:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-16 14:11 [Bug modula2/114745] New: const cast causes ICE gaius at gcc dot gnu.org
2024-04-16 14:29 ` [Bug modula2/114745] " gaius at gcc dot gnu.org
2024-04-16 18:04 ` gaius at gcc dot gnu.org
2024-04-16 22:09 ` cvs-commit at gcc dot gnu.org
2024-04-17  9:59 ` gaius 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).