1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

[MC][test] Reorganize macro tests

* Add locations
* Use FileCheck --match-full-lines --strict-whitespace
* Use CHECK-NEXT:
* Merge related tests
* Delete redundant tests
* Improve test coverage

Differential Revision: https://reviews.llvm.org/D77981
This commit is contained in:
Fangrui Song 2020-04-12 08:14:37 -07:00
parent a896ef43f6
commit 6c753fab28
16 changed files with 285 additions and 350 deletions

View File

@ -0,0 +1,46 @@
# RUN: not llvm-mc -triple=x86_64 %s -o /dev/null 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
# CHECK:{{.*}}.s:[[#@LINE+3]]:22: error: macro 'dup_params' has multiple parameters named 'a'
# CHECK-NEXT:.macro dup_params a a
# CHECK-NEXT: ^
.macro dup_params a a
# CHECK:{{.*}}.s:[[#@LINE+3]]:6: error: unexpected '.endm' in file, no current macro definition
# CHECK-NEXT:.endm
# CHECK-NEXT: ^
.endm
# CHECK-NEXT:{{.*}}.s:[[#@LINE+6]]:14: error: too many positional arguments
# CHECK-NEXT:one_arg 42, 42
# CHECK-NEXT: ^
.macro one_arg bar
.long \bar
.endm
one_arg 42, 42
# CHECK-NEXT:{{.*}}.s:[[#@LINE+6]]:10: error: Wrong number of arguments
# CHECK-NEXT:no_arg 42
# CHECK-NEXT: ^
.macro no_arg
.ascii "$20"
.endm
no_arg 42
.macro double first = -1, second = -1
.long \first
.long \second
.endm
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:14: error: too many positional arguments
# CHECK-NEXT:double 0, 1, 2
# CHECK-NEXT: ^
double 0, 1, 2
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:20: error: cannot mix positional and keyword arguments
# CHECK-NEXT:double second = 1, 2
# CHECK-NEXT: ^
double second = 1, 2
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:8: error: parameter named 'third' does not exist for macro 'double'
# CHECK-NEXT:double third = 0
# CHECK-NEXT: ^
double third = 0

View File

@ -0,0 +1,104 @@
# RUN: llvm-mc -triple=x86_64 %s | FileCheck %s
.macro empty, cond
.endm
empty ne
# CHECK: .ascii "3 \003"
.macro escape a
.ascii "\a \\a"
.endm
escape 3
.macro double first = -1, second = -1
.long \first
.long \second
.endm
# CHECK: .long -1
# CHECK-NEXT: .long -1
# CHECK-EMPTY:
double
# CHECK: .long -1
# CHECK-NEXT: .long -1
# CHECK-EMPTY:
double ,
# CHECK: .long 1
# CHECK-NEXT: .long -1
double 1
# CHECK: .long 2
# CHECK-NEXT: .long 3
double 2, 3
# CHECK: .long -1
# CHECK-NEXT: .long 4
double , 4
# CHECK: .long 5
# CHECK-NEXT: .long 6
double 5, second = 6
# CHECK: .long 7
# CHECK-NEXT: .long -1
double first = 7
# CHECK: .long -1
# CHECK-NEXT: .long 8
double second = 8
# CHECK: .long 10
# CHECK-NEXT: .long 9
double second = 9, first = 10
# CHECK: .long second+11
# CHECK-NEXT: .long -1
double second + 11
# CHECK: .long -1
# CHECK-NEXT: .long second+12
double , second + 12
# CHECK: .long second
# CHECK-NEXT: .long -1
double second
.macro mixed arg0 = 0, arg1 = 1 arg2 = 2, arg3 = 3
.long \arg0
.long \arg1
.long \arg2
.long \arg3
.endm
# CHECK: .long 1
# CHECK-NEXT: .long 2
# CHECK-NEXT: .long 3
# CHECK-NEXT: .long 3
mixed 1, 2 3
# CHECK: .long 1
# CHECK-NEXT: .long 2
# CHECK-NEXT: .long 3
# CHECK-NEXT: .long 3
mixed 1 2, 3
# CHECK: .long 1
# CHECK-NEXT: .long 2
# CHECK-NEXT: .long 3
# CHECK-NEXT: .long 4
mixed 1 2, 3 4
.macro ascii3 _a _b _c
.ascii "\_a|\_b|\_c"
.endm
## 3 arguments.
# CHECK: .ascii "a|b|c"
ascii3 a, b, c
# CHECK: .ascii "%1|%2|%3"
ascii3 %1 %2 %3
# CHECK: .ascii "1|2|3"
ascii3 1, 2,3
# CHECK: .ascii "1|2|3"
ascii3 1,2 3
# CHECK: .ascii "1|2|3"
ascii3 1 2, 3
# CHECK: .ascii "x-y|z|1"
ascii3 x - y z 1
## 2 arguments.
# CHECK: .ascii "1|(2 3)|"
ascii3 1, (2 3)
# CHECK: .ascii "1|(2 3)|"
ascii3 1 (2 3)

View File

@ -0,0 +1,13 @@
# RUN: llvm-mc -triple=x86_64-apple-darwin10 %s | FileCheck %s
.macro .make_macro
$0 $1
$2 $3
$4
.endmacro
.make_macro .macro,.mybyte,.byte,$0,.endmacro
.data
# CHECK: .byte 10
.mybyte 10

View File

@ -1,33 +1,30 @@
// RUN: llvm-mc -triple x86_64-apple-darwin10 %s | FileCheck %s
# RUN: llvm-mc -triple=x86_64 %s | FileCheck %s
# RUN: llvm-mc -triple=x86_64-apple-darwin10 %s | FileCheck %s
.macro .make_macro
$0 $1
$2 $3
$4
.endmacro
.macro make_macro a, b, c ,d ,e, f
\a \b \c
\d \e
\f
.endm
make_macro .macro,mybyte,a,.byte,\a,.endm
# CHECK: .byte 42
mybyte 42
.make_macro .macro,.mybyte,.byte,$0,.endmacro
.data
// CHECK: .byte 10
.mybyte 10
// PR18599
# PR18599
.macro macro_a
.macro macro_b
.byte 10
.macro macro_c
.endm
.macro macro_b
.byte 10
.macro macro_c
.endm
macro_c
.purgem macro_c
.endm
macro_b
macro_c
.purgem macro_c
.endm
macro_b
.endm
# CHECK: .byte 10
# CHECK: .byte 10
macro_a
macro_b
// CHECK: .byte 10
// CHECK: .byte 10

View File

@ -1,8 +0,0 @@
// REQUIRES: default_triple
// RUN: not llvm-mc %s 2> %t
// RUN: FileCheck < %t %s
.macro M a a
.endm
// CHECK: macro 'M' has multiple parameters named 'a'

View File

@ -1,10 +0,0 @@
// RUN: not llvm-mc -triple x86_64-unknown-unknown %s 2> %t
// RUN: FileCheck < %t %s
.macro foo bar
.long \bar
.endm
foo 42, 42
// CHECK: too many positional arguments

View File

@ -1,64 +0,0 @@
# RUN: not llvm-mc -triple i386 -o /dev/null %s 2>&1 | FileCheck %s
.macro missing_qualifier parameter:
# CHECK: error: missing parameter qualifier for 'parameter' in macro 'missing_qualifier'
# CHECK: .macro missing_qualifier parameter:
# CHECK: ^
.macro non_identifier_qualifier parameter:0
# CHECK: error: missing parameter qualifier for 'parameter' in macro 'non_identifier_qualifier'
# CHECK: .macro non_identifier_qualifier parameter:0
# CHECK: ^
.macro invalid_qualifier parameter:invalid_qualifier
# CHECK: error: invalid_qualifier is not a valid parameter qualifier for 'parameter' in macro 'invalid_qualifier'
# CHECK: .macro invalid_qualifier parameter:invalid_qualifier
# CHECK: ^
.macro pointless_default parameter:req=default
.endm
# CHECK: warning: pointless default value for required parameter 'parameter' in macro 'pointless_default'
# CHECK: .macro pointless_default parameter:req=default
# CHECK: ^
.macro missing_required_parameter parameter:req
.endm
missing_required_parameter
# CHECK: error: missing value for required parameter 'parameter' in macro 'missing_required_parameter'
# CHECK: missing_required_parameter
# CHECK: ^
.macro missing_second_required_argument first=0 second:req
.endm
missing_second_required_argument
# CHECK: error: missing value for required parameter 'second' in macro 'missing_second_required_argument'
# CHECK: missing_second_required_argument
# CHECK: ^
.macro second_third_required first=0 second:req third:req
.endm
second_third_required 0
# CHECK: error: missing value for required parameter 'second' in macro 'second_third_required'
# CHECK: second_third_required 0
# CHECK: ^
# CHECK: error: missing value for required parameter 'third' in macro 'second_third_required'
# CHECK: second_third_required 0
# CHECK: ^
second_third_required third=3 first=1
# CHECK: error: missing value for required parameter 'second' in macro 'second_third_required'
# CHECK: second_third_required third=3 first=1
# CHECK: ^

View File

@ -0,0 +1,51 @@
# RUN: not llvm-mc -triple=x86_64 %s -o /dev/null 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
# CHECK:{{.*}}.s:[[#@LINE+3]]:36: error: missing parameter qualifier for 'parameter' in macro 'missing_qualifier'
# CHECK-NEXT:.macro missing_qualifier parameter:
# CHECK-NEXT: ^
.macro missing_qualifier parameter:
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:43: error: missing parameter qualifier for 'parameter' in macro 'non_identifier_qualifier'
# CHECK-NEXT:.macro non_identifier_qualifier parameter:0
# CHECK-NEXT: ^
.macro non_identifier_qualifier parameter:0
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:36: error: invalid_qualifier is not a valid parameter qualifier for 'parameter' in macro 'invalid_qualifier'
# CHECK-NEXT:.macro invalid_qualifier parameter:invalid_qualifier
# CHECK-NEXT: ^
.macro invalid_qualifier parameter:invalid_qualifier
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:40: warning: pointless default value for required parameter 'parameter' in macro 'pointless_default'
# CHECK-NEXT:.macro pointless_default parameter:req=default
# CHECK-NEXT: ^
.macro pointless_default parameter:req=default
.endm
# CHECK-NEXT:{{.*}}.s:[[#@LINE+5]]:17: error: missing value for required parameter 'parameter' in macro 'missing_required'
# CHECK-NEXT:missing_required
# CHECK-NEXT: ^
.macro missing_required parameter:req
.endm
missing_required
# CHECK-NEXT:{{.*}}.s:[[#@LINE+5]]:24: error: missing value for required parameter 'second' in macro 'missing_second_required'
# CHECK-NEXT:missing_second_required
# CHECK-NEXT: ^
.macro missing_second_required first=0 second:req
.endm
missing_second_required
# CHECK-NEXT:{{.*}}.s:[[#@LINE+8]]:24: error: missing value for required parameter 'second' in macro 'second_third_required'
# CHECK-NEXT:second_third_required 0
# CHECK-NEXT: ^
# CHECK-NEXT:{{.*}}.s:[[#@LINE+5]]:24: error: missing value for required parameter 'third' in macro 'second_third_required'
# CHECK-NEXT:second_third_required 0
# CHECK-NEXT: ^
.macro second_third_required first=0 second:req third:req
.endm
second_third_required 0
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:38: error: missing value for required parameter 'second' in macro 'second_third_required'
# CHECK-NEXT:second_third_required third=3 first=1
# CHECK-NEXT: ^
second_third_required third=3 first=1

View File

@ -0,0 +1,19 @@
# RUN: not llvm-mc -triple x86_64 %s -o /dev/null 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
# CHECK:<instantiation>:1:1: error: unknown directive
# CHECK-NEXT:.macrobody0
# CHECK-NEXT:^
# CHECK-NEXT:<instantiation>:1:1: note: while in macro instantiation
# CHECK-NEXT:.test0
# CHECK-NEXT:^
# CHECK-NEXT:{{.*}}.s:[[#@LINE+10]]:1: note: while in macro instantiation
# CHECK-NEXT:.test1
# CHECK-NEXT:^
.macro .test0
.macrobody0
.endm
.macro .test1
.test0
.endm
.test1

View File

@ -1,24 +0,0 @@
# RUN: not llvm-mc -triple i386 -filetype asm -o /dev/null %s 2>&1 | FileCheck %s
.macro double first = -1, second = -1
# begin entry
.long \first
.long \second
# end entry
.endm
double 0, 1, 2
# CHECK: error: too many positional arguments
# CHECK: double 0, 1, 2
# CHECK: ^
double second = 1, 2
# CHECK: error: cannot mix positional and keyword arguments
# CHECK: double second = 1, 2
# CHECK: ^
double third = 0
# CHECK: error: parameter named 'third' does not exist for macro 'double'
# CHECK: double third = 0
# CHECK: ^

View File

@ -1,91 +0,0 @@
# RUN: llvm-mc -triple i386 -filetype asm -o - %s | FileCheck %s
.macro it, cond
.endm
it ne
.long 1
# CHECK: .long 1
.macro double first = -1, second = -1
# begin entry
.long \first
.long \second
# end entry
.endm
double
# CHECK: .long -1
# CHECK: .long -1
double 1
# CHECK: .long 1
# CHECK: .long -1
double 2, 3
# CHECK: .long 2
# CHECK: .long 3
double , 4
# CHECK: .long -1
# CHECK: .long 4
double 5, second = 6
# CHECK: .long 5
# CHECK: .long 6
double first = 7
# CHECK: .long 7
# CHECK: .long -1
double second = 8
# CHECK: .long -1
# CHECK: .long 8
double second = 9, first = 10
# CHECK: .long 10
# CHECK: .long 9
double second + 11
# CHECK: .long second+11
# CHECK: .long -1
double , second + 12
# CHECK: .long -1
# CHECK: .long second+12
double second
# CHECK: .long second
# CHECK: .long -1
.macro mixed arg0 = 0, arg1 = 1 arg2 = 2, arg3 = 3
# begin entry
.long \arg0
.long \arg1
.long \arg2
.long \arg3
# end entry
.endm
mixed 1, 2 3
# CHECK: .long 1
# CHECK: .long 2
# CHECK: .long 3
# CHECK: .long 3
mixed 1 2, 3
# CHECK: .long 1
# CHECK: .long 2
# CHECK: .long 3
# CHECK: .long 3
mixed 1 2, 3 4
# CHECK: .long 1
# CHECK: .long 2
# CHECK: .long 3
# CHECK: .long 4

View File

@ -1,105 +0,0 @@
// RUN: not llvm-mc -triple i386-linux-gnu %s 2> %t.err | FileCheck %s
// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err
.macro .test0
.macrobody0
.endm
.macro .test1
.test0
.endm
.test1
// CHECK-ERRORS: <instantiation>:1:1: error: unknown directive
// CHECK-ERRORS-NEXT: macrobody0
// CHECK-ERRORS-NEXT: ^
// CHECK-ERRORS: <instantiation>:1:1: note: while in macro instantiation
// CHECK-ERRORS-NEXT: .test0
// CHECK-ERRORS-NEXT: ^
// CHECK-ERRORS: 11:1: note: while in macro instantiation
// CHECK-ERRORS-NEXT: .test1
// CHECK-ERRORS-NEXT: ^
.macro test2 _a
.byte \_a
.endm
// CHECK: .byte 10
test2 10
.macro test3 _a _b _c
.ascii "\_a \_b \_c \\_c"
.endm
// CHECK: .ascii "1 2 3 \003"
test3 1, 2, 3
// CHECK: .ascii "1 2 3 \003"
test3 1, 2 3
.macro test3_prime _a _b _c
.ascii "\_a \_b \_c"
.endm
// CHECK: .ascii "1 (2 3) "
test3_prime 1, (2 3)
// CHECK: .ascii "1 (2 3) "
test3_prime 1 (2 3)
// CHECK: .ascii "1 2 "
test3_prime 1 2
.macro test5 _a
.globl \_a
.endm
// CHECK: .globl zed1
test5 zed1
.macro test6 $a
.globl \$a
.endm
// CHECK: .globl zed2
test6 zed2
.macro test7 .a
.globl \.a
.endm
// CHECK: .globl zed3
test7 zed3
.macro test8 _a, _b, _c
.ascii "\_a,\_b,\_c"
.endm
.macro test9 _a _b _c
.ascii "\_a \_b \_c"
.endm
// CHECK: .ascii "a,b,c"
test8 a, b, c
// CHECK: .ascii "%1,%2,%3"
test8 %1 %2 %3 #a comment
// CHECK: .ascii "x-y,z,1"
test8 x - y z 1
// CHECK: .ascii "1 2 3"
test9 1, 2,3
// CHECK: .ascii "1,2,3"
test8 1,2 3
// CHECK: .ascii "1,2,3"
test8 1 2, 3
.macro test10
.ascii "$20"
.endm
test10
// CHECK: .ascii "$20"
test10 42
// CHECK-ERRORS: 102:10: error: Wrong number of arguments
// CHECK-ERRORS-NEXT: test10 42
// CHECK-ERRORS-NEXT: ^

View File

@ -0,0 +1,30 @@
# RUN: not llvm-mc -triple x86_64 %s -o /dev/null 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
# RUN: not llvm-mc -triple x86_64-apple-darwin10 %s -o /dev/null 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
.macro .test0
.endmacro
.macros_off
# CHECK:{{.*}}.s:[[#@LINE+3]]:1: error: unknown directive
# CHECK-NEXT:.test0
# CHECK-NEXT:^
.test0
.macros_on
.test0
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:1: error: macro '.test0' is already defined
# CHECK-NEXT:.macro .test0
# CHECK-NEXT:^
.macro .test0
.endmacro
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:10: error: unexpected '.endmacro' in file, no current macro definition
# CHECK-NEXT:.endmacro
# CHECK-NEXT: ^
.endmacro
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:1: error: no matching '.endmacro' in definition
# CHECK-NEXT:.macro dummy
# CHECK-NEXT:^
.macro dummy

View File

@ -1,23 +0,0 @@
// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s 2> %t.err
// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err
.macro .test0
.endmacro
.macros_off
// CHECK-ERRORS: 9:1: error: unknown directive
.test0
.macros_on
.test0
// CHECK-ERRORS: macro '.test0' is already defined
.macro .test0
.endmacro
// CHECK-ERRORS: unexpected '.endmacro' in file
.endmacro
// CHECK-ERRORS: no matching '.endmacro' in definition
.macro dummy