/src/test/codegen/slice-init.rs

https://gitlab.com/rust-lang/rust · Rust · 64 lines · 37 code · 8 blank · 19 comment · 0 complexity · eb408e3cf64a85c5426cfe0f418c8b90 MD5 · raw file

  1. // compile-flags: -C no-prepopulate-passes
  2. #![crate_type = "lib"]
  3. // CHECK-LABEL: @zero_sized_elem
  4. #[no_mangle]
  5. pub fn zero_sized_elem() {
  6. // CHECK-NOT: br label %repeat_loop_header{{.*}}
  7. // CHECK-NOT: call void @llvm.memset.p0
  8. let x = [(); 4];
  9. drop(&x);
  10. }
  11. // CHECK-LABEL: @zero_len_array
  12. #[no_mangle]
  13. pub fn zero_len_array() {
  14. // CHECK-NOT: br label %repeat_loop_header{{.*}}
  15. // CHECK-NOT: call void @llvm.memset.p0
  16. let x = [4; 0];
  17. drop(&x);
  18. }
  19. // CHECK-LABEL: @byte_array
  20. #[no_mangle]
  21. pub fn byte_array() {
  22. // CHECK: call void @llvm.memset.{{.+}}({{i8\*|ptr}} {{.*}}, i8 7, i{{[0-9]+}} 4
  23. // CHECK-NOT: br label %repeat_loop_header{{.*}}
  24. let x = [7u8; 4];
  25. drop(&x);
  26. }
  27. #[allow(dead_code)]
  28. #[derive(Copy, Clone)]
  29. enum Init {
  30. Loop,
  31. Memset,
  32. }
  33. // CHECK-LABEL: @byte_enum_array
  34. #[no_mangle]
  35. pub fn byte_enum_array() {
  36. // CHECK: call void @llvm.memset.{{.+}}({{i8\*|ptr}} {{.*}}, i8 {{.*}}, i{{[0-9]+}} 4
  37. // CHECK-NOT: br label %repeat_loop_header{{.*}}
  38. let x = [Init::Memset; 4];
  39. drop(&x);
  40. }
  41. // CHECK-LABEL: @zeroed_integer_array
  42. #[no_mangle]
  43. pub fn zeroed_integer_array() {
  44. // CHECK: call void @llvm.memset.{{.+}}({{i8\*|ptr}} {{.*}}, i8 0, i{{[0-9]+}} 16
  45. // CHECK-NOT: br label %repeat_loop_header{{.*}}
  46. let x = [0u32; 4];
  47. drop(&x);
  48. }
  49. // CHECK-LABEL: @nonzero_integer_array
  50. #[no_mangle]
  51. pub fn nonzero_integer_array() {
  52. // CHECK: br label %repeat_loop_header{{.*}}
  53. // CHECK-NOT: call void @llvm.memset.p0
  54. let x = [0x1a_2b_3c_4d_u32; 4];
  55. drop(&x);
  56. }