https://gcc.gnu.org/g:4b5848cf526e24b21d9bef6f25fc9e6f56775a0a

commit r17-4741-g4b5848cf526e24b21d9bef6f25fc9e6f56775a0a
Author: Gaius Mulley <[email protected]>
Date:   Tue Sep 29 10:49:27 2026 +0100

    PR modula2/127657: Intrinsic procedure functions should filter spelling 
hints based on context
    
    This patch adds context filtering to both parameters of the intrinsic
    procedure function VAL.  It will filter the first on type and the second
    on constants, expressions and variables.
    
    gcc/m2/ChangeLog:
    
            PR modula2/127657
            * gm2-compiler/M2Quads.mod (BuildValFunction): Add filtering
            spell check for unknown symbols.
    
    gcc/testsuite/ChangeLog:
    
            PR modula2/127657
            * gm2.dg/spell/iso/fail/valspell.mod: New test.
            * gm2.dg/spell/iso/fail/valspell2.mod: New test.
            * gm2.dg/spell/iso/fail/valspell3.mod: New test.
    
    Signed-off-by: Gaius Mulley <[email protected]>

Diff:
---
 gcc/m2/gm2-compiler/M2Quads.mod                   | 10 +++++++++-
 gcc/testsuite/gm2.dg/spell/iso/fail/valspell.mod  | 16 ++++++++++++++++
 gcc/testsuite/gm2.dg/spell/iso/fail/valspell2.mod | 16 ++++++++++++++++
 gcc/testsuite/gm2.dg/spell/iso/fail/valspell3.mod | 16 ++++++++++++++++
 4 files changed, 57 insertions(+), 1 deletion(-)

diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod
index 498f1b4c3199..79a3a8b7a934 100644
--- a/gcc/m2/gm2-compiler/M2Quads.mod
+++ b/gcc/m2/gm2-compiler/M2Quads.mod
@@ -9585,7 +9585,7 @@ BEGIN
          (* It is sensible not to try and recover when we dont know the return 
type.  *)
          MetaErrorT1 (typetok,
                       'undeclared type found in builtin procedure function' +
-                      ' {%AkVAL} {%1ad} {%1&s}', Type) ;
+                      ' {%AkVAL} {%1ad} {%1&Ts}', Type) ;
          (* Non recoverable error.  *)
          UnknownReported (Type)
       ELSIF ConstExprError (ProcSym, Exp, exptok, ConstExpr)
@@ -9595,6 +9595,14 @@ BEGIN
          ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Exp))) 
;
          PutVar (ReturnVar, Type) ;
          PushTFtok (ReturnVar, Type, combinedtok)
+      ELSIF IsUnknown (Exp)
+      THEN
+         (* Spellcheck.  *)
+         MetaErrorT1 (exptok,
+                      'undeclared variable or constant expression found in 
builtin procedure function' +
+                      ' {%AkVAL} {%1ad} {%1&VCs}', Exp) ;
+         (* Non recoverable error.  *)
+         UnknownReported (Exp)
       ELSIF (IsSet (Type) OR IsEnumeration (Type) OR IsSubrange (Type) OR
              IsType (Type) OR IsPointer (Type) OR IsProcType (Type)) AND
              (IsVar (Exp) OR IsConst (Exp) OR IsProcedure (Exp))
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/valspell.mod 
b/gcc/testsuite/gm2.dg/spell/iso/fail/valspell.mod
new file mode 100644
index 000000000000..6a2a905b21d6
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/valspell.mod
@@ -0,0 +1,16 @@
+
+(* { dg-do compile } *)
+(* { dg-options "-g -c" } *)
+
+MODULE valspell ;
+
+CONST
+   CARDINAl = 1 ;
+VAR
+   c: CARDINAL ;
+   i: INTEGER ;
+BEGIN
+   i := 1 ;
+   c := VAL (CARDIN, i)
+   (* { dg-error "undeclared type found in builtin procedure function VAL 
'CARDIN', did you mean CARDINAL" "CARDIN" { target *-*-* } 14 } *)
+END valspell.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/valspell2.mod 
b/gcc/testsuite/gm2.dg/spell/iso/fail/valspell2.mod
new file mode 100644
index 000000000000..3a1ef707178a
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/valspell2.mod
@@ -0,0 +1,16 @@
+
+(* { dg-do compile } *)
+(* { dg-options "-g -c" } *)
+
+MODULE valspell2 ;
+
+TYPE
+   i1 = CHAR ;
+VAR
+   c: CARDINAL ;
+   i9: INTEGER ;
+BEGIN
+   i9 := 1 ;
+   c := VAL (CARDINAL, ii)
+   (* { dg-error "undeclared variable or constant expression found in builtin 
procedure function VAL 'ii', did you mean i9" "ii" { target *-*-* } 14 } *)
+END valspell2.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/valspell3.mod 
b/gcc/testsuite/gm2.dg/spell/iso/fail/valspell3.mod
new file mode 100644
index 000000000000..68232c31b55e
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/valspell3.mod
@@ -0,0 +1,16 @@
+
+(* { dg-do compile } *)
+(* { dg-options "-g -c" } *)
+
+MODULE valspell3 ;
+
+TYPE
+   i1 = CHAR ;
+VAR
+   c: CARDINAL ;
+   i9: INTEGER ;
+BEGIN
+   i9 := 1 ;
+   c := VAL (CARDINAL, i0)
+   (* { dg-error "undeclared variable or constant expression found in builtin 
procedure function VAL 'i0', did you mean i9" "i0" { target *-*-* } 14 } *)
+END valspell3.

Reply via email to