new-array-init.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
  2. // CHECK-LABEL: define void @_Z2fni
  3. void fn(int n) {
  4. // CHECK: icmp ult i{{32|64}} %{{[^ ]+}}, 3
  5. // CHECK: store i32 1
  6. // CHECK: store i32 2
  7. // CHECK: store i32 3
  8. // CHECK: sub {{.*}}, 12
  9. // CHECK: call void @llvm.memset
  10. new int[n] { 1, 2, 3 };
  11. }
  12. // CHECK-LABEL: define void @_Z15const_underflowv
  13. void const_underflow() {
  14. // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
  15. // CHECK: call i8* @_Zna{{.}}(i{{32|64}} -1)
  16. new int[2] { 1, 2, 3 };
  17. }
  18. // CHECK-LABEL: define void @_Z11const_exactv
  19. void const_exact() {
  20. // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
  21. // CHECK-NOT: icmp eq i32*
  22. new int[3] { 1, 2, 3 };
  23. }
  24. // CHECK-LABEL: define void @_Z16const_sufficientv
  25. void const_sufficient() {
  26. // CHECK-NOT: icmp ult i{{32|64}} %{{[^ ]+}}, 3
  27. new int[4] { 1, 2, 3 };
  28. // CHECK: ret void
  29. }
  30. // CHECK-LABEL: define void @_Z22check_array_value_initv
  31. void check_array_value_init() {
  32. struct S;
  33. new (int S::*[3][4][5]) ();
  34. // CHECK: call i8* @_Zna{{.}}(i{{32 240|64 480}})
  35. // CHECK: getelementptr inbounds i{{32|64}}, i{{32|64}}* {{.*}}, i{{32|64}} 60
  36. // CHECK: phi
  37. // CHECK: store i{{32|64}} -1,
  38. // CHECK: getelementptr inbounds i{{32|64}}, i{{32|64}}* {{.*}}, i{{32|64}} 1
  39. // CHECK: icmp eq
  40. // CHECK: br i1
  41. }