As PR target/116174 shown, we may need to verify the directive order. Extend check-function-bodies to cover directives.
* gcc.target/i386/pr116174.c: Use check-function-bodies. * lib/scanasm.exp (configure_check-function-bodies): Add an argument for fluff. Set up_config(fluff) to $fluff if not empty. (check-function-bodies): Add an optional argument for fluff and pass it to configure_check-function-bodies. Signed-off-by: H.J. Lu <hjl.to...@gmail.com> --- gcc/testsuite/gcc.target/i386/pr116174.c | 16 ++++++++++++++-- gcc/testsuite/lib/scanasm.exp | 17 ++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/gcc/testsuite/gcc.target/i386/pr116174.c b/gcc/testsuite/gcc.target/i386/pr116174.c index 8877d0b51af..75c62964d97 100644 --- a/gcc/testsuite/gcc.target/i386/pr116174.c +++ b/gcc/testsuite/gcc.target/i386/pr116174.c @@ -1,6 +1,20 @@ /* { dg-do compile { target *-*-linux* } } */ /* { dg-options "-O2 -fcf-protection=branch" } */ +/* Keep directives ('.p2align', '.cfi_startproc'). +/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\s*(?://|$)} } } */ +/* +**foo: +**... +** .cfi_startproc +** ( +** endbr64 +** | +** endbr32 +** ) +** .p2align 5 +**... +*/ char * foo (char *dest, const char *src) { @@ -8,5 +22,3 @@ foo (char *dest, const char *src) /* nothing */; return --dest; } - -/* { dg-final { scan-assembler "\t\.cfi_startproc\n\tendbr(32|64)\n" } } */ diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp index 42c719c512c..5165284608f 100644 --- a/gcc/testsuite/lib/scanasm.exp +++ b/gcc/testsuite/lib/scanasm.exp @@ -863,7 +863,7 @@ proc scan-lto-assembler { args } { # Set up CONFIG for check-function-bodies. -proc configure_check-function-bodies { config } { +proc configure_check-function-bodies { config fluff } { upvar $config up_config # Regexp for the start of a function definition (name in \1). @@ -890,7 +890,9 @@ proc configure_check-function-bodies { config } { } # Regexp for lines that aren't interesting. - if { [istarget nvptx*-*-*] } { + if {$fluff ne ""} then { + set up_config(fluff) $fluff + } elseif { [istarget nvptx*-*-*] } { # Skip lines beginning with '//' comments ('-fverbose-asm', for # example). set up_config(fluff) {^\s*(?://)} @@ -982,7 +984,7 @@ proc check_function_body { functions name body_regexp } { # Check the implementations of functions against expected output. Used as: # -# { dg-do { check-function-bodies PREFIX TERMINATOR[ OPTION[ SELECTOR]] } } +# { dg-do { check-function-bodies PREFIX TERMINATOR[ OPTION[ SELECTOR [FLUFF]]] } } # # See sourcebuild.texi for details. @@ -990,7 +992,7 @@ proc check-function-bodies { args } { if { [llength $args] < 2 } { error "too few arguments to check-function-bodies" } - if { [llength $args] > 4 } { + if { [llength $args] > 5 } { error "too many arguments to check-function-bodies" } @@ -1029,6 +1031,11 @@ proc check-function-bodies { args } { } } + set fluff "" + if { [llength $args] >= 5 } { + set fluff [lindex $args 4] + } + set testcase [testname-for-summary] # The name might include a list of options; extract the file name. set filename [lindex $testcase 0] @@ -1048,7 +1055,7 @@ proc check-function-bodies { args } { # (name in \1). This may be different from '$config(start)'. set start_expected {^(\S+):$} - configure_check-function-bodies config + configure_check-function-bodies config $fluff set have_bodies 0 if { [is_remote host] } { remote_upload host "$filename" -- 2.46.0