Compiler projects using llvm
; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s

.data

dq_single_character BYTE "a"
; CHECK-LABEL: dq_single_character:
; CHECK-NEXT: .byte 97
; CHECK-NOT: .byte

dq_join BYTE "ab", "cd"
; CHECK-LABEL: dq_join:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

dq_quote_escape BYTE "ab""""cd"
; Intended result: ab""cd
; CHECK-LABEL: dq_quote_escape:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

dq_single_quote BYTE "ab''''cd"
; Intended result: ab''''cd
; CHECK-LABEL: dq_single_quote:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

sq_single_character BYTE 'a'
; CHECK-LABEL: sq_single_character:
; CHECK-NEXT: .byte 97
; CHECK-NOT: .byte

sq_join BYTE 'ab', 'cd'
; CHECK-LABEL: sq_join:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

sq_quote_escape BYTE 'ab''''cd'
; Intended result: ab''cd
; CHECK-LABEL: sq_quote_escape:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

sq_double_quote BYTE 'ab""""cd'
; Intended result: ab""""cd
; CHECK-LABEL: sq_double_quote:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

mixed_quotes_join BYTE "a'b", 'c"d'
; Intended result: a'bc"d
; CHECK-LABEL: mixed_quotes_join:
; CHECK-NEXT: .byte 97
; CHECK-NEXT: .byte 39
; CHECK-NEXT: .byte 98
; CHECK-NEXT: .byte 99
; CHECK-NEXT: .byte 34
; CHECK-NEXT: .byte 100
; CHECK-NOT: .byte

.code

sq_char_test PROC
; CHECK-LABEL: sq_char_test:

  mov eax, 'a'
; CHECK: mov eax, 97

  mov eax, ''''
; CHECK: mov eax, 39

  mov eax, '"'
; CHECK: mov eax, 34

  ret
sq_char_test ENDP

dq_char_test PROC
; CHECK-LABEL: dq_char_test:

  mov eax, "b"
; CHECK: mov eax, 98

  mov eax, """"
; CHECK: mov eax, 34

  mov eax, "'"
; CHECK: mov eax, 39

  ret
dq_char_test ENDP

string_constant_test PROC
; CHECK-LABEL: string_constant_test:

  mov eax, 'ab'
  mov eax, "ab"
; CHECK: mov eax, 24930
; CHECK: mov eax, 24930

  mov eax, "abc"
  mov eax, 'abc'
; CHECK: mov eax, 6382179
; CHECK: mov eax, 6382179

  mov eax, "abc"""
  mov eax, 'abc'''
; CHECK: mov eax, 1633837858
; CHECK: mov eax, 1633837863

  ret
string_constant_test ENDP

end