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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Gaius Mulley
<ga...@gcc.gnu.org>:

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

commit r14-10983-gbcb8f401101455e1e6098bb9808d2059f4425de7
Author: Gaius Mulley <gaiusm...@gmail.com>
Date:   Tue Nov 26 13:04:05 2024 +0000

    [PATCH] PR modula2/116048 ICE when encountering wrong kind of qualident

    Following on from PR-115957 further ICEs can be generated by using the
    wrong kind of qualident symbol.  For example using a variable instead of
    a type or using a type instead of a const.  This fix tracks the expected
    qualident kind state when parsing const, type and variable declarations.
    If the error is unrecoverable then a detailed message explaining the
    context of the qualident (and why the seen qualident is wrong) is
    generated.

    gcc/m2/ChangeLog:

            PR modula2/116048
            * Make-lang.in (GM2-COMP-BOOT-DEFS): Add M2StateCheck.def.
            (GM2-COMP-BOOT-MODS): Add M2StateCheck.mod.
            (GM2-COMP-DEFS): Add M2StateCheck.def.
            (GM2-COMP-MODS): Add M2StateCheck.mod.
            * gm2-compiler/M2Quads.mod (StartBuildWith): Generate
            unrecoverable error is the qualident type is NulSym.
            Replace MetaError1 with MetaErrorT1 and position the error
            to the qualident.
            * gm2-compiler/P3Build.bnf (M2StateCheck): Import procedures.
            (seenError): New variable.
            (WasNoError): Remove variable.
            (BlockState): New variable.
            (ErrorString): Rewrite using seenError.
            (CompilationUnit): Ditto.
            (QualidentCheck): New rule.
            (ConstantDeclaration): Bookend with InclConst and ExclConst.
            (Constructor): Add InclConstructor, ExclConstructor and call
            CheckQualident.
            (ConstActualParameters): Call PushState, PopState, InclConstFunc
            and CheckQualident.
            (TypeDeclaration): Bookend with InclType and ExclType.
            (SimpleType): Call QualidentCheck.
            (CaseTag): Ditto.
            (OptReturnType): Ditto.
            (VariableDeclaration): Bookend with InclVar and ExclVar.
            (Designator): Call QualidentCheck.
            (Formal;Type): Ditto.
            * gm2-compiler/PCBuild.bnf (M2StateCheck): Import procedures.
            (ConstantDeclaration): Rewrite using InclConst and ExclConst.
            (Constructor): Bookend with InclConstructor and ExclConstructor.
            Call CheckQualident.
            (ConstructorOrConstActualParameters): Rewrite and cal
            l CheckQualident.
            (ConstActualParameters): Bookend with PushState PopState.
            Call InclConstFunc and CheckQualident.
            * gm2-gcc/init.cc (_M2_M2StateCheck_init): New declaration.
            (_M2_P3Build_init): New declaration.
            (init_PerCompilationInit): Call _M2_M2StateCheck_init and
            _M2_P3Build_init.
            * gm2-compiler/M2StateCheck.def: New file.
            * gm2-compiler/M2StateCheck.mod: New file.

    gcc/testsuite/ChangeLog:

            PR modula2/116048
            * gm2/errors/fail/errors-fail.exp: Remove -Wstudents
            and add -Wuninit-variable-checking=all.
            Replace gm2_init_pim with gm2_init_iso.
            * gm2/errors/fail/testfio.mod: Modify test code to
            provoke an error in the first basic block.
            * gm2/errors/fail/testparam.mod: Ditto.
            * gm2/errors/fail/array1.mod: Ditto.
            * gm2/errors/fail/badtype.mod: New test.
            * gm2/errors/fail/badvar.mod: New test.

    (cherry picked from commit 7f8064ff0e2ac90c5bb6c30cc61acc5a28ebbe4c)

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

Reply via email to