diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2024-05-07 19:24:08 +0100 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2024-05-07 19:24:08 +0100 |
commit | 76e591200f54226290ddb49b8ac6231a694bf882 (patch) | |
tree | 7b1b22bd8c37d6b86c345c614c9be753276cb862 | |
parent | 1139f38e798181572121657e5b267a9698edb62f (diff) | |
download | gcc-76e591200f54226290ddb49b8ac6231a694bf882.zip gcc-76e591200f54226290ddb49b8ac6231a694bf882.tar.gz gcc-76e591200f54226290ddb49b8ac6231a694bf882.tar.bz2 |
PR modula2/114133 bugfix constants must be cast prior to vararg call
This bug fix corrects the test codes below by converting the constant
literals to the type required by C. In the testcases below the values, 1
etc were converted into the INTEGER type before being passed to a C
vararg function. By default in modula2 constant literal ordinals are
represented as the ZTYPE (the largest GCC integer type node).
gcc/testsuite/ChangeLog:
PR modula2/114133
* gm2/extensions/run/pass/callingc10.mod: Convert constant
literal numbers into INTEGER.
* gm2/extensions/run/pass/callingc11.mod: Ditto.
* gm2/extensions/run/pass/vararg2.mod: Ditto.
* gm2/iso/run/pass/packed.mod: Emit a printf as a runtime
diagnostic.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
4 files changed, 11 insertions, 9 deletions
diff --git a/gcc/testsuite/gm2/extensions/run/pass/callingc10.mod b/gcc/testsuite/gm2/extensions/run/pass/callingc10.mod index 3a2d3e2..0c26fed 100644 --- a/gcc/testsuite/gm2/extensions/run/pass/callingc10.mod +++ b/gcc/testsuite/gm2/extensions/run/pass/callingc10.mod @@ -4,13 +4,13 @@ FROM cvararg IMPORT funcptr ; FROM SYSTEM IMPORT ADR ; BEGIN - IF funcptr (1, "hello", 5) = 1 + IF funcptr (INTEGER (1), "hello", INTEGER (5)) = INTEGER (1) THEN END ; - IF funcptr (1, "hello" + " ", 6) = 1 + IF funcptr (INTEGER (1), "hello" + " ", INTEGER (6)) = INTEGER (1) THEN END ; - IF funcptr (1, "hello" + " " + "world", 11) = 1 + IF funcptr (INTEGER (1), "hello" + " " + "world", INTEGER (11)) = INTEGER (1) THEN END END callingc10. diff --git a/gcc/testsuite/gm2/extensions/run/pass/callingc11.mod b/gcc/testsuite/gm2/extensions/run/pass/callingc11.mod index 9b8cb82..d71026e 100644 --- a/gcc/testsuite/gm2/extensions/run/pass/callingc11.mod +++ b/gcc/testsuite/gm2/extensions/run/pass/callingc11.mod @@ -5,13 +5,13 @@ FROM SYSTEM IMPORT ADR ; FROM strconst IMPORT WORLD ; BEGIN - IF funcptr (1, "hello", 5) = 1 + IF funcptr (INTEGER (1), "hello", INTEGER (5)) = INTEGER (1) THEN END ; - IF funcptr (1, "hello" + " ", 6) = 1 + IF funcptr (INTEGER (1), "hello" + " ", INTEGER (6)) = INTEGER (1) THEN END ; - IF funcptr (1, "hello" + " " + WORLD, 11) = 1 + IF funcptr (INTEGER (1), "hello" + " " + WORLD, INTEGER (11)) = INTEGER (1) THEN END END callingc11. diff --git a/gcc/testsuite/gm2/extensions/run/pass/vararg2.mod b/gcc/testsuite/gm2/extensions/run/pass/vararg2.mod index e26ed09..05f7074 100644 --- a/gcc/testsuite/gm2/extensions/run/pass/vararg2.mod +++ b/gcc/testsuite/gm2/extensions/run/pass/vararg2.mod @@ -21,13 +21,13 @@ FROM cvararg IMPORT funcptr ; FROM SYSTEM IMPORT ADR ; BEGIN - IF funcptr(1, ADR("hello world"), 11)=1 + IF funcptr(INTEGER (1), ADR("hello world"), INTEGER (11))=INTEGER (1) THEN END ; - IF funcptr(1, ADR("hello"), 5)=1 + IF funcptr(INTEGER (1), ADR("hello"), INTEGER (5))=INTEGER (1) THEN END ; - IF funcptr(1, ADR("/etc/passwd"), 11)=1 + IF funcptr(INTEGER (1), ADR("/etc/passwd"), INTEGER (11))=INTEGER (1) THEN END END vararg2. diff --git a/gcc/testsuite/gm2/iso/run/pass/packed.mod b/gcc/testsuite/gm2/iso/run/pass/packed.mod index 401a699..3dad71e 100644 --- a/gcc/testsuite/gm2/iso/run/pass/packed.mod +++ b/gcc/testsuite/gm2/iso/run/pass/packed.mod @@ -38,7 +38,9 @@ PROCEDURE test ; VAR v: CARDINAL ; BEGIN + printf ("testing to see BITSET{0} = CARDINAL (1)..."); Assert(CAST(CARDINAL, BITSET{0}) = VAL(CARDINAL, 1), __FILE__, __LINE__) ; + printf ("yes\n"); v := MAX(CARDINAL)-1 ; WHILE v>0 DO Assert(CAST(CARDINAL, SHIFT(CAST(BITSET, v), -1)) = v DIV 2, __FILE__, __LINE__) ; |