public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug modula2/114548] New: gm2 fails to identify variable in a const expression
@ 2024-04-01 16:27 gaius at gcc dot gnu.org
2024-04-01 16:27 ` [Bug modula2/114548] " gaius at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-01 16:27 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114548
Bug ID: 114548
Summary: gm2 fails to identify variable in a const expression
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.
gm2 fails to identify the specific variable within a const expression. It
gives an error for the whole expression rather than the sub expression in
error.
For example:
$ cat testcmplx.mod
MODULE testcmplx ;
CONST
foo = CMPLX (r, i) ;
VAR
r, i: REAL ;
BEGIN
END testcmplx.
$ gm2 -fiso testcmplx.mod
testcmplx.mod:4:8: error: In program module ‘testcmplx’: in assignment, cannot
assign a variable to a constant ‘foo’
4 | foo = CMPLX (r, i) ;
| ~~~~^~~~~~~~~~~~~
testcmplx.mod:4:4: error: designator ‘foo’ is declared as a CONST
4 | foo = CMPLX (r, i) ;
| ^~~
it could identify r and i as variables.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug modula2/114548] gm2 fails to identify variable in a const expression
2024-04-01 16:27 [Bug modula2/114548] New: gm2 fails to identify variable in a const expression gaius at gcc dot gnu.org
@ 2024-04-01 16:27 ` gaius at gcc dot gnu.org
2024-04-01 16:28 ` gaius at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-01 16:27 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114548
Gaius Mulley <gaius at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Ever confirmed|0 |1
Last reconfirmed| |2024-04-01
--- Comment #1 from Gaius Mulley <gaius at gcc dot gnu.org> ---
Confirmed.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug modula2/114548] gm2 fails to identify variable in a const expression
2024-04-01 16:27 [Bug modula2/114548] New: gm2 fails to identify variable in a const expression gaius at gcc dot gnu.org
2024-04-01 16:27 ` [Bug modula2/114548] " gaius at gcc dot gnu.org
@ 2024-04-01 16:28 ` gaius at gcc dot gnu.org
2024-04-01 16:44 ` gaius at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-01 16:28 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114548
--- Comment #2 from Gaius Mulley <gaius at gcc dot gnu.org> ---
This is true for many of the standard procedure functions.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug modula2/114548] gm2 fails to identify variable in a const expression
2024-04-01 16:27 [Bug modula2/114548] New: gm2 fails to identify variable in a const expression gaius at gcc dot gnu.org
2024-04-01 16:27 ` [Bug modula2/114548] " gaius at gcc dot gnu.org
2024-04-01 16:28 ` gaius at gcc dot gnu.org
@ 2024-04-01 16:44 ` gaius at gcc dot gnu.org
2024-04-01 18:20 ` cvs-commit at gcc dot gnu.org
2024-04-01 18:20 ` gaius at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-01 16:44 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114548
--- Comment #3 from Gaius Mulley <gaius at gcc dot gnu.org> ---
Created attachment 57840
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57840&action=edit
Proposed fix
Here is a proposed patch (which fixes all the standard procedure function
const/var parameter checking):
$ gm2 -fiso testcmplx.mod
testcmplx.mod:4:17: error: In program module ‘testcmplx’: the procedure
function ‘CMPLX’ is being called from within a constant expression and
therefore the parameter ‘r’ must be a constant, seen a variable
4 | foo = CMPLX (r, i) ;
| ^
testcmplx.mod:4:20: error: the procedure function ‘CMPLX’ is being called from
within a constant expression and therefore the parameter ‘i’ must be a
constant, seen a variable
4 | foo = CMPLX (r, i) ;
| ^
testcmplx.mod:4:8: error: in assignment, cannot assign a variable to a constant
‘foo’
4 | foo = CMPLX (r, i) ;
| ~~~~^~~~~~~~~~~~~
testcmplx.mod:4:4: error: designator ‘foo’ is declared as a CONST
4 | foo = CMPLX (r, i) ;
| ^~~
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug modula2/114548] gm2 fails to identify variable in a const expression
2024-04-01 16:27 [Bug modula2/114548] New: gm2 fails to identify variable in a const expression gaius at gcc dot gnu.org
` (2 preceding siblings ...)
2024-04-01 16:44 ` gaius at gcc dot gnu.org
@ 2024-04-01 18:20 ` cvs-commit at gcc dot gnu.org
2024-04-01 18:20 ` gaius at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-04-01 18:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114548
--- Comment #4 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:4bd2f59af4a78cdc80039cffa51c1d9ad91081a3
commit r14-9739-g4bd2f59af4a78cdc80039cffa51c1d9ad91081a3
Author: Gaius Mulley <gaiusmod2@gmail.com>
Date: Mon Apr 1 19:18:36 2024 +0100
PR modula2/114548 gm2 fails to identify variable in a const expression
This patch introduces stricter checking within standard procedure
functions which detect whether paramaters are variable when used
in a const expression.
gcc/m2/ChangeLog:
PR modula2/114548
* gm2-compiler/M2Quads.mod (ConvertToAddress): Pass
procedure, false parameters to BuildConvertFunction.
(PushOne): Pass procedure, true parameters to
BuildConvertFunction.
Remove usused parameter internal.
(BuildPseudoBy): Remove parameter to PushOne.
(BuildIncProcedure): Ditto.
(BuildDecProcedure): Ditto.
(BuildFunctionCall): Add ConstExpr parameter to
BuildPseudoFunctionCall.
(BuildConstFunctionCall): Add procedure and true to
BuildConvertFunction.
(BuildPseudoFunctionCall): Add ConstExpr parameter.
Pass ProcSym and ConstExpr to BuildLengthFunction,
BuildConvertFunction, BuildOddFunction, BuildAbsFunction,
BuildCapFunction, BuildValFunction, BuildChrFunction,
BuildOrdFunction, BuildIntFunction, BuildTruncFunction,
BuildFloatFunction, BuildAddAdrFunction, BuildSubAdrFunction,
BuildDifAdrFunction, BuildCastFunction, BuildReFunction,
BuildImFunction and BuildCmplxFunction.
(BuildAddAdrFunction): Add ProcSym, ConstExpr parameters and
check for constant parameters.
(BuildSubAdrFunction): Ditto.
(BuildDifAdrFunction): Ditto.
(ConstExprError): Ditto.
(BuildLengthFunction): Ditto.
(BuildOddFunction): Ditto.
(BuildAbsFunction): Ditto.
(BuildCapFunction): Ditto.
(BuildChrFunction): Ditto.
(BuildOrdFunction): Ditto.
(BuildIntFunction): Ditto.
(BuildValFunction): Ditto.
(BuildCastFunction): Ditto.
(BuildConvertFunction): Ditto.
(BuildTruncFunction): Ditto.
(BuildFloatFunction): Ditto.
(BuildReFunction): Ditto.
(BuildImFunction): Ditto.
(BuildCmplxFunction): Ditto.
gcc/testsuite/ChangeLog:
PR modula2/114548
* gm2/iso/const/fail/expression.mod: New test.
* gm2/iso/const/fail/iso-const-fail.exp: New test.
* gm2/iso/const/fail/testabs.mod: New test.
* gm2/iso/const/fail/testaddadr.mod: New test.
* gm2/iso/const/fail/testcap.mod: New test.
* gm2/iso/const/fail/testcap2.mod: New test.
* gm2/iso/const/fail/testchr.mod: New test.
* gm2/iso/const/fail/testchr2.mod: New test.
* gm2/iso/const/fail/testcmplx.mod: New test.
* gm2/iso/const/fail/testfloat.mod: New test.
* gm2/iso/const/fail/testim.mod: New test.
* gm2/iso/const/fail/testint.mod: New test.
* gm2/iso/const/fail/testlength.mod: New test.
* gm2/iso/const/fail/testodd.mod: New test.
* gm2/iso/const/fail/testord.mod: New test.
* gm2/iso/const/fail/testre.mod: New test.
* gm2/iso/const/fail/testtrunc.mod: New test.
* gm2/iso/const/fail/testval.mod: New test.
* gm2/iso/const/pass/constbool.mod: New test.
* gm2/iso/const/pass/constbool2.mod: New test.
* gm2/iso/const/pass/constbool3.mod: New test.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug modula2/114548] gm2 fails to identify variable in a const expression
2024-04-01 16:27 [Bug modula2/114548] New: gm2 fails to identify variable in a const expression gaius at gcc dot gnu.org
` (3 preceding siblings ...)
2024-04-01 18:20 ` cvs-commit at gcc dot gnu.org
@ 2024-04-01 18:20 ` gaius at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: gaius at gcc dot gnu.org @ 2024-04-01 18:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114548
Gaius Mulley <gaius at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #5 from Gaius Mulley <gaius at gcc dot gnu.org> ---
Closing now the patch has been applied.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-01 18:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-01 16:27 [Bug modula2/114548] New: gm2 fails to identify variable in a const expression gaius at gcc dot gnu.org
2024-04-01 16:27 ` [Bug modula2/114548] " gaius at gcc dot gnu.org
2024-04-01 16:28 ` gaius at gcc dot gnu.org
2024-04-01 16:44 ` gaius at gcc dot gnu.org
2024-04-01 18:20 ` cvs-commit at gcc dot gnu.org
2024-04-01 18:20 ` 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).