@@ -383,6 +383,74 @@ bb0:
383383 return %4 : $Int8
384384}
385385
386+ // CHECK-LABEL: sil @string_null_pointer_check :
387+ // CHECK: %0 = integer_literal $Builtin.Int1, 0
388+ // CHECK-NEXT: return %0
389+ // CHECK: } // end sil function 'string_null_pointer_check'
390+ sil @string_null_pointer_check : $@convention(thin) () -> Builtin.Int1 {
391+ bb0:
392+ %0 = string_literal utf8 "hello"
393+ %1 = builtin "ptrtoint_Word"(%0 : $Builtin.RawPointer) : $Builtin.Word
394+ %2 = builtin "zextOrBitCast_Word_Int64"(%1 : $Builtin.Word) : $Builtin.Int64
395+ %3 = integer_literal $Builtin.Int64, 0
396+ %4 = builtin "cmp_eq_Int64"(%2 : $Builtin.Int64, %3 : $Builtin.Int64) : $Builtin.Int1
397+ return %4 : $Builtin.Int1
398+ }
399+
400+ // CHECK-LABEL: sil @string_null_pointer_check_ne :
401+ // CHECK: %0 = integer_literal $Builtin.Int1, -1
402+ // CHECK-NEXT: return %0
403+ // CHECK: } // end sil function 'string_null_pointer_check_ne'
404+ sil @string_null_pointer_check_ne : $@convention(thin) () -> Builtin.Int1 {
405+ bb0:
406+ %0 = string_literal utf8 "hello"
407+ %1 = builtin "ptrtoint_Word"(%0 : $Builtin.RawPointer) : $Builtin.Word
408+ %2 = builtin "zextOrBitCast_Word_Int64"(%1 : $Builtin.Word) : $Builtin.Int64
409+ %3 = integer_literal $Builtin.Int64, 0
410+ %4 = builtin "cmp_ne_Int64"(%2 : $Builtin.Int64, %3 : $Builtin.Int64) : $Builtin.Int1
411+ return %4 : $Builtin.Int1
412+ }
413+
414+ // CHECK-LABEL: sil @string_null_pointer_check_no_integer_literal :
415+ // CHECK: %4 = builtin "cmp_eq_Int64"(%3 : $Builtin.Int64, %0 : $Builtin.Int64)
416+ // CHECK-NEXT: return %4
417+ // CHECK: } // end sil function 'string_null_pointer_check_no_integer_literal'
418+ sil @string_null_pointer_check_no_integer_literal : $@convention(thin) (Builtin.Int64) -> Builtin.Int1 {
419+ bb0(%0 : $Builtin.Int64):
420+ %1 = string_literal utf8 "hello"
421+ %2 = builtin "ptrtoint_Word"(%1 : $Builtin.RawPointer) : $Builtin.Word
422+ %3 = builtin "zextOrBitCast_Word_Int64"(%2 : $Builtin.Word) : $Builtin.Int64
423+ %4 = builtin "cmp_eq_Int64"(%3 : $Builtin.Int64, %0 : $Builtin.Int64) : $Builtin.Int1
424+ return %4 : $Builtin.Int1
425+ }
426+
427+ // CHECK-LABEL: sil @string_null_pointer_check_not_zero :
428+ // CHECK: %4 = builtin "cmp_eq_Int64"(%2 : $Builtin.Int64, %3 : $Builtin.Int64)
429+ // CHECK-NEXT: return %4
430+ // CHECK: } // end sil function 'string_null_pointer_check_not_zero'
431+ sil @string_null_pointer_check_not_zero : $@convention(thin) () -> Builtin.Int1 {
432+ bb0:
433+ %0 = string_literal utf8 "hello"
434+ %1 = builtin "ptrtoint_Word"(%0 : $Builtin.RawPointer) : $Builtin.Word
435+ %2 = builtin "zextOrBitCast_Word_Int64"(%1 : $Builtin.Word) : $Builtin.Int64
436+ %3 = integer_literal $Builtin.Int64, 123
437+ %4 = builtin "cmp_eq_Int64"(%2 : $Builtin.Int64, %3 : $Builtin.Int64) : $Builtin.Int1
438+ return %4 : $Builtin.Int1
439+ }
440+
441+ // CHECK-LABEL: sil @string_null_pointer_check_no_string_literal :
442+ // CHECK: %4 = builtin "cmp_eq_Int64"(%2 : $Builtin.Int64, %3 : $Builtin.Int64)
443+ // CHECK-NEXT: return %4
444+ // CHECK: } // end sil function 'string_null_pointer_check_no_string_literal'
445+ sil @string_null_pointer_check_no_string_literal : $@convention(thin) (Builtin.RawPointer) -> Builtin.Int1 {
446+ bb0(%0 : $Builtin.RawPointer):
447+ %1 = builtin "ptrtoint_Word"(%0 : $Builtin.RawPointer) : $Builtin.Word
448+ %2 = builtin "zextOrBitCast_Word_Int64"(%1 : $Builtin.Word) : $Builtin.Int64
449+ %3 = integer_literal $Builtin.Int64, 0
450+ %4 = builtin "cmp_eq_Int64"(%2 : $Builtin.Int64, %3 : $Builtin.Int64) : $Builtin.Int1
451+ return %4 : $Builtin.Int1
452+ }
453+
386454// CHECK-LABEL: sil @convert_thick_to_thin1
387455// CHECK-NOT: metatype $@thick C1<Int>.Type
388456// CHECK: [[L:%.*]] = metatype $@thin C1<Int>.Type
@@ -490,3 +558,4 @@ bb0(%0 : $Builtin.RawPointer, %1 : $Builtin.Word):
490558 %3 = builtin "destroyArray"<C1<Int>>(%2 : $@thick C1<Int>.Type, %0 : $Builtin.RawPointer, %1 : $Builtin.Word) : $()
491559 return %0 : $Builtin.RawPointer
492560}
561+
0 commit comments