// RUN: %clang_cc1 -triple i686-pc-linux-gnu %s -o - -emit-llvm -verify | FileCheck %s
// expected-no-diagnostics

typedef __typeof(sizeof(int)) size_t;

namespace test1 {
  struct A { void operator delete(void*,size_t); int x; };

  // CHECK-LABEL: define{{.*}} void @_ZN5test11aEPNS_1AE(
  void a(A *x) {
    // CHECK:      load
    // CHECK-NEXT: icmp eq {{.*}}, null
    // CHECK-NEXT: br i1
    // CHECK:      call void @_ZN5test11AdlEPvj(ptr noundef %{{.*}}, i32 noundef 4)
    delete x;
  }
}

// Check that we make cookies for the two-arg delete even when using
// the global allocator and deallocator.
namespace test2 {
  struct A {
    int x;
    void *operator new[](size_t);
    void operator delete[](void *, size_t);
  };

  // CHECK: define{{.*}} ptr @_ZN5test24testEv()
  A *test() {
    // CHECK:      [[NEW:%.*]] = call noalias noundef nonnull ptr @_Znaj(i32 noundef 44)
    // CHECK-NEXT: store i32 10, ptr [[NEW]]
    // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds i8, ptr [[NEW]], i32 4
    // CHECK-NEXT: ret ptr [[T1]]
    return ::new A[10];
  }

  // CHECK-LABEL: define{{.*}} void @_ZN5test24testEPNS_1AE(
  void test(A *p) {
    // CHECK:      [[P:%.*]] = alloca ptr, align 4
    // CHECK-NEXT: store ptr {{%.*}}, ptr [[P]], align 4
    // CHECK-NEXT: [[T0:%.*]] = load ptr, ptr [[P]], align 4
    // CHECK-NEXT: [[T1:%.*]] = icmp eq ptr [[T0]], null
    // CHECK-NEXT: br i1 [[T1]],
    // CHECK: [[T3:%.*]] = getelementptr inbounds i8, ptr [[T0]], i32 -4
    // CHECK-NEXT: [[T5:%.*]] = load i32, ptr [[T3]]
    // CHECK-NEXT: [[T6:%.*]] = mul i32 4, [[T5]]
    // CHECK-NEXT: [[T7:%.*]] = add i32 [[T6]], 4
    // CHECK-NEXT: call void @_ZdaPvj(ptr noundef [[T3]], i32 noundef [[T7]])
    // CHECK-NEXT: br label
    ::delete[] p;
  }
}

namespace test3 {
  struct A {
    int x;
    void operator delete[](void *, size_t);
  };
  struct B : A {};

  // CHECK-LABEL: define{{.*}} void @_ZN5test34testEv()
  void test() {
    // CHECK:      [[CALL:%.*]] = call noalias noundef nonnull ptr @_Znaj(i32 noundef 24)
    // CHECK-NEXT: store i32 5
    (void) new B[5];
  }
}
