// Test -fsanitize-memory-use-after-dtor
// RUN: %clang_cc1 -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-optzns -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-optzns -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s

// 24 bytes total
struct Packed {
  // Packed into 4 bytes
  unsigned int a : 1;
  unsigned int b : 1;
  //unsigned int c : 1;
  // Force alignment to next 4 bytes
  unsigned int   : 0;
  unsigned int d : 1;
  // Force alignment, 8 more bytes
  double e = 5.0;
  // 4 bytes
  unsigned int f : 1;
  ~Packed() {}
};
Packed p;


// 1 byte total
struct Empty {
  unsigned int : 0;
  ~Empty() {}
};
Empty e;


// 4 byte total
struct Simple {
  unsigned int a : 1;
  ~Simple() {}
};
Simple s;


// 8 bytes total
struct Anon {
  // 1 byte
  unsigned int a : 1;
  unsigned int b : 2;
  // Force alignment to next byte
  unsigned int   : 0;
  unsigned int c : 1;
  ~Anon() {}
};
Anon an;


struct CharStruct {
  char c;
  ~CharStruct();
};

struct Adjacent {
  CharStruct a;
  int b : 1;
  CharStruct c;
  ~Adjacent() {}
};
Adjacent ad;


// CHECK-LABEL: define {{.*}}PackedD2Ev
// CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 17
// CHECK: ret void

// CHECK-LABEL: define {{.*}}EmptyD2Ev
// CHECK-NOT: call void @__sanitizer_dtor_callback{{.*}}i64 0
// CHECK: ret void

// CHECK-LABEL: define {{.*}}SimpleD2Ev
// CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 1
// CHECK: ret void

// CHECK-LABEL: define {{.*}}AnonD2Ev
// CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 5
// CHECK: ret void

// CHECK-LABEL: define {{.*}}AdjacentD2Ev
// CHECK: call void @__sanitizer_dtor_callback{{.*}}i64 1
// CHECK: ret void
