testsuite: Add support for Rust and Modula-2 effective target tests

Message ID Y5sR1W/p4K0CEMRU@tucnak
State New
Headers
Series testsuite: Add support for Rust and Modula-2 effective target tests |

Commit Message

Jakub Jelinek Dec. 15, 2022, 12:23 p.m. UTC
  Hi!

This patch allows magic comments also for Rust and Modula-2
for effective target tests etc. and fixes up the Assembly entry
- it is a glob, so /* Assembly can match /whatever Assembly and
not just /* Assembly.

Tested on x86_64-linux with
make check-g++ RUNTESTFLAGS=i386.exp=pr35513*
and verifying it still uses *.S extension for the property_1_needed
effective target test.

Ok for trunk?

2022-12-15  Jakub Jelinek  <jakub@redhat.com>

	* lib/target-supports.exp (check_compile): Add support for
	Rust and Modula-2.  Use \* rather than * for /* comment for
	Assembly.


	Jakub
  

Comments

Richard Biener Dec. 15, 2022, 12:48 p.m. UTC | #1
On Thu, 15 Dec 2022, Jakub Jelinek wrote:

> Hi!
> 
> This patch allows magic comments also for Rust and Modula-2
> for effective target tests etc. and fixes up the Assembly entry
> - it is a glob, so /* Assembly can match /whatever Assembly and
> not just /* Assembly.
> 
> Tested on x86_64-linux with
> make check-g++ RUNTESTFLAGS=i386.exp=pr35513*
> and verifying it still uses *.S extension for the property_1_needed
> effective target test.
> 
> Ok for trunk?

OK.

Thanks,
Richard.

> 2022-12-15  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* lib/target-supports.exp (check_compile): Add support for
> 	Rust and Modula-2.  Use \* rather than * for /* comment for
> 	Assembly.
> 
> --- gcc/testsuite/lib/target-supports.exp.jj	2022-11-30 10:29:42.217698938 +0100
> +++ gcc/testsuite/lib/target-supports.exp	2022-12-15 13:08:47.941221943 +0100
> @@ -36,7 +36,9 @@
>  # "! Fortran" for Fortran code,
>  # "/* ObjC", for ObjC
>  # "// ObjC++" for ObjC++
> -# and "// Go" for Go
> +# "// Go" for Go
> +# "// Rust" for Rust
> +# and "(* Modula-2" for Modula-2
>  # If the tool is ObjC/ObjC++ then we overide the extension to .m/.mm to 
>  # allow for ObjC/ObjC++ specific flags.
>  
> @@ -58,13 +60,15 @@ proc check_compile {basename type conten
>  	set options ""
>      }
>      switch -glob -- $contents {
> -	"*/* Assembly*" { set src ${basename}[pid].S }
> +	"*/\* Assembly*" { set src ${basename}[pid].S }
>  	"*! Fortran*" { set src ${basename}[pid].f90 }
>  	"*// C++*" { set src ${basename}[pid].cc }
>  	"*// D*" { set src ${basename}[pid].d }
>  	"*// ObjC++*" { set src ${basename}[pid].mm }
>  	"*/* ObjC*" { set src ${basename}[pid].m }
>  	"*// Go*" { set src ${basename}[pid].go }
> +	"*// Rust*" { set src ${basename}[pid].rs }
> +	"*(\* Modula-2*" { set src ${basename}[pid].mod }
>  	default {
>  	    switch -- $tool {
>  		"objc" { set src ${basename}[pid].m }
> 
> 	Jakub
> 
>
  
Arthur Cohen Dec. 15, 2022, 12:53 p.m. UTC | #2
Hi Jakub,

On 12/15/22 13:23, Jakub Jelinek wrote:
> Hi!
> 
> This patch allows magic comments also for Rust and Modula-2
> for effective target tests etc. and fixes up the Assembly entry
> - it is a glob, so /* Assembly can match /whatever Assembly and
> not just /* Assembly.
> 
> Tested on x86_64-linux with
> make check-g++ RUNTESTFLAGS=i386.exp=pr35513*
> and verifying it still uses *.S extension for the property_1_needed
> effective target test.
> 
> Ok for trunk?
> 
> 2022-12-15  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* lib/target-supports.exp (check_compile): Add support for
> 	Rust and Modula-2.  Use \* rather than * for /* comment for
> 	Assembly.
> 
> --- gcc/testsuite/lib/target-supports.exp.jj	2022-11-30 10:29:42.217698938 +0100
> +++ gcc/testsuite/lib/target-supports.exp	2022-12-15 13:08:47.941221943 +0100
> @@ -36,7 +36,9 @@
>   # "! Fortran" for Fortran code,
>   # "/* ObjC", for ObjC
>   # "// ObjC++" for ObjC++
> -# and "// Go" for Go
> +# "// Go" for Go
> +# "// Rust" for Rust
> +# and "(* Modula-2" for Modula-2
>   # If the tool is ObjC/ObjC++ then we overide the extension to .m/.mm to
>   # allow for ObjC/ObjC++ specific flags.
>   
> @@ -58,13 +60,15 @@ proc check_compile {basename type conten
>   	set options ""
>       }
>       switch -glob -- $contents {
> -	"*/* Assembly*" { set src ${basename}[pid].S }
> +	"*/\* Assembly*" { set src ${basename}[pid].S }
>   	"*! Fortran*" { set src ${basename}[pid].f90 }
>   	"*// C++*" { set src ${basename}[pid].cc }
>   	"*// D*" { set src ${basename}[pid].d }
>   	"*// ObjC++*" { set src ${basename}[pid].mm }
>   	"*/* ObjC*" { set src ${basename}[pid].m }
>   	"*// Go*" { set src ${basename}[pid].go }
> +	"*// Rust*" { set src ${basename}[pid].rs }
> +	"*(\* Modula-2*" { set src ${basename}[pid].mod }
>   	default {
>   	    switch -- $tool {
>   		"objc" { set src ${basename}[pid].m }
> 
> 	Jakub
> 

LGTM :)

Thank you,

Arthur
  
Andreas Schwab Dec. 15, 2022, 1:01 p.m. UTC | #3
On Dez 15 2022, Jakub Jelinek via Gcc-rust wrote:

> @@ -58,13 +60,15 @@ proc check_compile {basename type conten
>  	set options ""
>      }
>      switch -glob -- $contents {
> -	"*/* Assembly*" { set src ${basename}[pid].S }
> +	"*/\* Assembly*" { set src ${basename}[pid].S }

That's a no-op.  Either double the backslash or quote with {} instead of
"".
  
Andreas Schwab Dec. 15, 2022, 1:03 p.m. UTC | #4
On Dez 15 2022, Jakub Jelinek via Gcc-rust wrote:

> @@ -58,13 +60,15 @@ proc check_compile {basename type conten
>  	set options ""
>      }
>      switch -glob -- $contents {
> -	"*/* Assembly*" { set src ${basename}[pid].S }
> +	"*/\* Assembly*" { set src ${basename}[pid].S }
>  	"*! Fortran*" { set src ${basename}[pid].f90 }
>  	"*// C++*" { set src ${basename}[pid].cc }
>  	"*// D*" { set src ${basename}[pid].d }
>  	"*// ObjC++*" { set src ${basename}[pid].mm }
>  	"*/* ObjC*" { set src ${basename}[pid].m }

You probably want to quote the * here too.
  
Jakub Jelinek Dec. 15, 2022, 1:22 p.m. UTC | #5
On Thu, Dec 15, 2022 at 02:03:36PM +0100, Andreas Schwab wrote:
> On Dez 15 2022, Jakub Jelinek via Gcc-rust wrote:
> 
> > @@ -58,13 +60,15 @@ proc check_compile {basename type conten
> >  	set options ""
> >      }
> >      switch -glob -- $contents {
> > -	"*/* Assembly*" { set src ${basename}[pid].S }
> > +	"*/\* Assembly*" { set src ${basename}[pid].S }
> >  	"*! Fortran*" { set src ${basename}[pid].f90 }
> >  	"*// C++*" { set src ${basename}[pid].cc }
> >  	"*// D*" { set src ${basename}[pid].d }
> >  	"*// ObjC++*" { set src ${basename}[pid].mm }
> >  	"*/* ObjC*" { set src ${basename}[pid].m }
> 
> You probably want to quote the * here too.

You're right on both, I've committed this follow-up
after verifying that Assembly test still works (it works even with \\\*
but doesn't with \\\\*) and verifying that changing 
check_effective_target_property_1_needed
to have // Assembly instead of /* Assembly incorrectly works with
"*/* Assembly*", "*/\* Assembly*" but correctly doesn't work with
"*/\\* Assembly*" or "*/\\\* Assembly*".

Committed to trunk.  Sorry.

2022-12-15  Jakub Jelinek  <jakub@redhat.com>
    
	* lib/target-supports.exp (check_compile): Further quoting
	fixes for /* Assembly, /* ObjC and (* Modula-2 *) checks.

--- gcc/testsuite/lib/target-supports.exp.jj	2022-12-15 13:57:40.000000000 +0100
+++ gcc/testsuite/lib/target-supports.exp	2022-12-15 14:14:02.987854385 +0100
@@ -60,15 +60,15 @@ proc check_compile {basename type conten
 	set options ""
     }
     switch -glob -- $contents {
-	"*/\* Assembly*" { set src ${basename}[pid].S }
+	"*/\\* Assembly*" { set src ${basename}[pid].S }
 	"*! Fortran*" { set src ${basename}[pid].f90 }
 	"*// C++*" { set src ${basename}[pid].cc }
 	"*// D*" { set src ${basename}[pid].d }
 	"*// ObjC++*" { set src ${basename}[pid].mm }
-	"*/* ObjC*" { set src ${basename}[pid].m }
+	"*/\\* ObjC*" { set src ${basename}[pid].m }
 	"*// Go*" { set src ${basename}[pid].go }
 	"*// Rust*" { set src ${basename}[pid].rs }
-	"*(\* Modula-2*" { set src ${basename}[pid].mod }
+	"*(\\* Modula-2*" { set src ${basename}[pid].mod }
 	default {
 	    switch -- $tool {
 		"objc" { set src ${basename}[pid].m }


	Jakub
  

Patch

--- gcc/testsuite/lib/target-supports.exp.jj	2022-11-30 10:29:42.217698938 +0100
+++ gcc/testsuite/lib/target-supports.exp	2022-12-15 13:08:47.941221943 +0100
@@ -36,7 +36,9 @@ 
 # "! Fortran" for Fortran code,
 # "/* ObjC", for ObjC
 # "// ObjC++" for ObjC++
-# and "// Go" for Go
+# "// Go" for Go
+# "// Rust" for Rust
+# and "(* Modula-2" for Modula-2
 # If the tool is ObjC/ObjC++ then we overide the extension to .m/.mm to 
 # allow for ObjC/ObjC++ specific flags.
 
@@ -58,13 +60,15 @@  proc check_compile {basename type conten
 	set options ""
     }
     switch -glob -- $contents {
-	"*/* Assembly*" { set src ${basename}[pid].S }
+	"*/\* Assembly*" { set src ${basename}[pid].S }
 	"*! Fortran*" { set src ${basename}[pid].f90 }
 	"*// C++*" { set src ${basename}[pid].cc }
 	"*// D*" { set src ${basename}[pid].d }
 	"*// ObjC++*" { set src ${basename}[pid].mm }
 	"*/* ObjC*" { set src ${basename}[pid].m }
 	"*// Go*" { set src ${basename}[pid].go }
+	"*// Rust*" { set src ${basename}[pid].rs }
+	"*(\* Modula-2*" { set src ${basename}[pid].mod }
 	default {
 	    switch -- $tool {
 		"objc" { set src ${basename}[pid].m }