[Bug modula2/114745] const cast causes ICE

2024-04-17 Thread gaius at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114745

Gaius Mulley  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #4 from Gaius Mulley  ---
Closing now the patch has been applied.

[Bug modula2/114745] const cast causes ICE

2024-04-16 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114745

--- Comment #3 from GCC Commits  ---
The master branch has been updated by Gaius Mulley :

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

commit r14-9998-geadd05d5601063bd0c7ef6c3606b4eeb856d57d7
Author: Gaius Mulley 
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): 

[Bug modula2/114745] const cast causes ICE

2024-04-16 Thread gaius at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114745

--- Comment #2 from Gaius Mulley  ---
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 
$

[Bug modula2/114745] const cast causes ICE

2024-04-16 Thread gaius at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114745

Gaius Mulley  changed:

   What|Removed |Added

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

--- Comment #1 from Gaius Mulley  ---
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  for instructions.