https://gcc.gnu.org/g:0adb415d128cf54b607b71f1022bbf088ab6ae36

commit r16-1345-g0adb415d128cf54b607b71f1022bbf088ab6ae36
Author: Gaius Mulley <gaiusm...@gmail.com>
Date:   Mon Jun 9 15:26:35 2025 +0100

    PR modula2/119779: ASM examples no longer work
    
    This patch introduces a regression test using the example in the
    documentation and tests it using -masm=intel on x86_64-*-gnu systems.
    
    gcc/testsuite/ChangeLog:
    
            PR modula2/119779
            * gm2.dg/doc/examples/run/pass/doc-examples-run-pass.exp: New test.
            * gm2.dg/doc/examples/run/pass/exampleadd2.mod: New test.
    
    Signed-off-by: Gaius Mulley <gaiusm...@gmail.com>

Diff:
---
 .../examples/run/pass/doc-examples-run-pass.exp    | 17 +++++++++++
 .../gm2.dg/doc/examples/run/pass/exampleadd2.mod   | 35 ++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git 
a/gcc/testsuite/gm2.dg/doc/examples/run/pass/doc-examples-run-pass.exp 
b/gcc/testsuite/gm2.dg/doc/examples/run/pass/doc-examples-run-pass.exp
new file mode 100644
index 000000000000..6fb7d6e2cf37
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/doc/examples/run/pass/doc-examples-run-pass.exp
@@ -0,0 +1,17 @@
+# Compile tests, no torture testing.
+#
+# These tests should all pass.
+
+# Load support procs.
+load_lib gm2-dg.exp
+
+gm2_init_pim4 $srcdir/$subdir -masm=intel
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] "" ""
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gm2.dg/doc/examples/run/pass/exampleadd2.mod 
b/gcc/testsuite/gm2.dg/doc/examples/run/pass/exampleadd2.mod
new file mode 100644
index 000000000000..8bab2994c226
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/doc/examples/run/pass/exampleadd2.mod
@@ -0,0 +1,35 @@
+(* { dg-do assemble { target { x86_64-*-gnu* } } } *)
+(* { dg-options "-masm=intel" } *)
+(* { dg-do run { target x86_64-*-gnu* } } *)
+
+MODULE exampleadd2 ;
+
+FROM libc IMPORT printf, exit ;
+
+
+PROCEDURE Example (foo, bar: LONGCARD) : CARDINAL ;
+VAR
+   myout: LONGCARD ;
+BEGIN
+   ASM VOLATILE (
+    "mov rax, %[left]; add rax, %[right]; mov %[output], rax;"
+      : [output] "=rm" (myout)                  (* outputs *)
+      : [left] "rm" (foo), [right] "rm" (bar)   (* inputs  *)
+      : "rax") ;                                (* we trash *)
+   RETURN( myout )
+END Example ;
+
+VAR
+   a, b, c: CARDINAL ;
+BEGIN
+   a := 1 ;
+   b := 2 ;
+   c := Example (a, b) ;
+   IF c = 3
+   THEN
+      printf ("success result from function is %d\n", c) ;
+   ELSE
+      printf ("example failed to return 3, seen %d\n" , c) ;
+      exit (1)
+   END
+END exampleadd2.
\ No newline at end of file

Reply via email to