// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
// RUN: %clang_cc1 -std=c++20 -triple=x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=LINUX
// RUN: %clang_cc1 -std=c++20 -triple=x86_64-pc-windows-msvc -emit-llvm -o - %s | FileCheck %s --check-prefix=WINDOWS


struct Empty {};

// LINUX-LABEL: define dso_local void @_Z9testEmptyP5Empty(
// LINUX-SAME: ptr noundef [[E:%.*]]) #[[ATTR0:[0-9]+]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[E_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[E]], ptr [[E_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[E_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testEmpty@@YAXPEAUEmpty@@@Z"(ptr noundef %e) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %e.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %e, ptr %e.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %e.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   ret void
//
void testEmpty(Empty *e) {
  // This should clear the one byte that Empty occupies.
  __builtin_clear_padding(e);
}


// LINUX-LABEL: define dso_local void @_Z22testPrimitiveNoPaddingPi(
// LINUX-SAME: ptr noundef [[I:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[I_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[I]], ptr [[I_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[I_ADDR]], align 8
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testPrimitiveNoPadding@@YAXPEAH@Z"(ptr noundef %i) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %i.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %i, ptr %i.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %i.addr, align 8
// WINDOWS-NEXT:   ret void
//
void testPrimitiveNoPadding(int *i) {
  // This should not clear any padding, since int has no padding.
  __builtin_clear_padding(i);
}


// LINUX-LABEL: define dso_local void @_Z23testPrimitiveLongDoublePe(
// LINUX-SAME: ptr noundef [[LD:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[LD_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[LD]], ptr [[LD_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[LD_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 10
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 11
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 12
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 4
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testPrimitiveLongDouble@@YAXPEAO@Z"(ptr noundef %ld) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %ld.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %ld, ptr %ld.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %ld.addr, align 8
// WINDOWS-NEXT:   ret void
//
void testPrimitiveLongDouble(long double *ld) {
  // padding [10, 15] on x86
  __builtin_clear_padding(ld);
}

// LINUX-LABEL: define dso_local void @_Z10testBitIntPDB97_(
// LINUX-SAME: ptr noundef [[BI:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[BI_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[BI]], ptr [[BI_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BI_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 12
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 4
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], 1
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 4
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testBitInt@@YAXPEAU?$_BitInt@$0GB@@__clang@@@Z"(ptr noundef %bi) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %bi.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %bi, ptr %bi.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %bi.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 12
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 4
// WINDOWS-NEXT:   %3 = and i8 %2, 1
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 4
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %5, align 2
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   ret void
//
void testBitInt(_BitInt(97) *bi) {
  // Storage is widened to 128 bits; clear bits [97, 128).
  __builtin_clear_padding(bi);
}


// LINUX-LABEL: define dso_local void @_Z30testPrimitiveComplexLongDoublePCe(
// LINUX-SAME: ptr noundef [[C:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 10
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 11
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 12
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 4
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 26
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 2
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[TMP0]], i32 27
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 1
// LINUX-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[TMP0]], i32 28
// LINUX-NEXT:    store i8 0, ptr [[TMP9]], align 4
// LINUX-NEXT:    [[TMP10:%.*]] = getelementptr i8, ptr [[TMP0]], i32 29
// LINUX-NEXT:    store i8 0, ptr [[TMP10]], align 1
// LINUX-NEXT:    [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP11]], align 2
// LINUX-NEXT:    [[TMP12:%.*]] = getelementptr i8, ptr [[TMP0]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP12]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testPrimitiveComplexLongDouble@@YAXPEAU?$_Complex@O@__clang@@@Z"(ptr noundef %c) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %c.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %c, ptr %c.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %c.addr, align 8
// WINDOWS-NEXT:   ret void
//
void testPrimitiveComplexLongDouble(_Complex long double *c) {
  // padding [10, 15] and [26, 31] on x86
  __builtin_clear_padding(c);
}

union U1 {
  int i;
  char c;
};

// LINUX-LABEL: define dso_local void @_Z24testUnionDifferentLengthP2U1(
// LINUX-SAME: ptr noundef [[U:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[U_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[U]], ptr [[U_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[U_ADDR]], align 8
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnionDifferentLength@@YAXPEATU1@@@Z"(ptr noundef %u) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %u.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %u, ptr %u.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %u.addr, align 8
// WINDOWS-NEXT:   ret void
//
void testUnionDifferentLength(U1 *u) {
  // This should not clear the object representation bits of the non-active member.
  __builtin_clear_padding(u);
}


struct S {
  alignas(8) char c1;
};

union U2 {
  S s1;
  char c2;
};

// LINUX-LABEL: define dso_local void @_Z35testUnionTailPaddingOfLongestMemberP2U2(
// LINUX-SAME: ptr noundef [[U:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[U_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[U]], ptr [[U_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[U_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 2
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 2
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 4
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 4
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 2
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnionTailPaddingOfLongestMember@@YAXPEATU2@@@Z"(ptr noundef %u) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %u.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %u, ptr %u.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %u.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 2
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 4
// WINDOWS-NEXT:   store i8 0, ptr %4, align 4
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %6, align 2
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   ret void
//
void testUnionTailPaddingOfLongestMember(U2 *u) {
  // This should clear the tail padding of the longest member.
  // [1 - 7]
  __builtin_clear_padding(u);
}


struct alignas(4) Foo {
  char a;
  alignas(2) char b;
};

struct alignas(4) Bar {
  char c;
  alignas(2) char d;
};

struct alignas(4) Baz : Foo {
  char e;
  Bar f;
};

// Baz structure:
// "a", PAD_1, "b", PAD_2, "c", PAD_3, PAD_4, PAD_5, "c", PAD_6, "d", PAD_7
// %struct.Baz = type { %struct.Foo, i8, [3 x i8], %struct.Bar }
// %struct.Foo = type { i8, i8, i8, i8 }
// %struct.Bar = type { i8, i8, i8, i8 }

// LINUX-LABEL: define dso_local void @_Z33testStructPaddingInBetweenMembersP3Baz(
// LINUX-SAME: ptr noundef [[BAZ:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[BAZ_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[BAZ]], ptr [[BAZ_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BAZ_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 2
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 9
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 11
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testStructPaddingInBetweenMembers@@YAXPEAUBaz@@@Z"(ptr noundef %baz) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %baz.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %baz, ptr %baz.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %baz.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %4, align 2
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 9
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %0, i32 11
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   ret void
//
void testStructPaddingInBetweenMembers(Baz *baz) {
  // this should clear all the padding in between various members
  __builtin_clear_padding(baz);
}

// LINUX-LABEL: define dso_local void @_Z18testStructVolatilePV3Baz(
// LINUX-SAME: ptr noundef [[BAZ:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[BAZ_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[BAZ]], ptr [[BAZ_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BAZ_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 2
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 9
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 11
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testStructVolatile@@YAXPECUBaz@@@Z"(ptr noundef %baz) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %baz.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %baz, ptr %baz.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %baz.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %4, align 2
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 9
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %0, i32 11
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   ret void
//
void testStructVolatile(volatile Baz *baz) {
  // this should clear all the padding in between various members
  __builtin_clear_padding(baz);
}

class S1 {
  int x;
  char c;
};

class S2 {
  [[no_unique_address]] S1 s1;
  bool b;
};

// LINUX-LABEL: define dso_local void @_Z19testNoUniqueAddressP2S2(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testNoUniqueAddress@@YAXPEAVS2@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 9
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 10
// WINDOWS-NEXT:   store i8 0, ptr %5, align 2
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 11
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   ret void
//
void testNoUniqueAddress(S2 *s) {
  // "x [0-3]",  "c" , "b", PAD [6-7]
  __builtin_clear_padding(s);
}

struct S3 {
  long double l;
  bool b;
};

// LINUX-LABEL: define dso_local void @_Z24testStructWithLongDoubleP2S3(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 10
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 11
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 12
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 4
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 17
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 1
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[TMP0]], i32 18
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 2
// LINUX-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[TMP0]], i32 19
// LINUX-NEXT:    store i8 0, ptr [[TMP9]], align 1
// LINUX-NEXT:    [[TMP10:%.*]] = getelementptr i8, ptr [[TMP0]], i32 20
// LINUX-NEXT:    store i8 0, ptr [[TMP10]], align 4
// LINUX-NEXT:    [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i32 21
// LINUX-NEXT:    store i8 0, ptr [[TMP11]], align 1
// LINUX-NEXT:    [[TMP12:%.*]] = getelementptr i8, ptr [[TMP0]], i32 22
// LINUX-NEXT:    store i8 0, ptr [[TMP12]], align 2
// LINUX-NEXT:    [[TMP13:%.*]] = getelementptr i8, ptr [[TMP0]], i32 23
// LINUX-NEXT:    store i8 0, ptr [[TMP13]], align 1
// LINUX-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[TMP0]], i32 24
// LINUX-NEXT:    store i8 0, ptr [[TMP14]], align 8
// LINUX-NEXT:    [[TMP15:%.*]] = getelementptr i8, ptr [[TMP0]], i32 25
// LINUX-NEXT:    store i8 0, ptr [[TMP15]], align 1
// LINUX-NEXT:    [[TMP16:%.*]] = getelementptr i8, ptr [[TMP0]], i32 26
// LINUX-NEXT:    store i8 0, ptr [[TMP16]], align 2
// LINUX-NEXT:    [[TMP17:%.*]] = getelementptr i8, ptr [[TMP0]], i32 27
// LINUX-NEXT:    store i8 0, ptr [[TMP17]], align 1
// LINUX-NEXT:    [[TMP18:%.*]] = getelementptr i8, ptr [[TMP0]], i32 28
// LINUX-NEXT:    store i8 0, ptr [[TMP18]], align 4
// LINUX-NEXT:    [[TMP19:%.*]] = getelementptr i8, ptr [[TMP0]], i32 29
// LINUX-NEXT:    store i8 0, ptr [[TMP19]], align 1
// LINUX-NEXT:    [[TMP20:%.*]] = getelementptr i8, ptr [[TMP0]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP20]], align 2
// LINUX-NEXT:    [[TMP21:%.*]] = getelementptr i8, ptr [[TMP0]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP21]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testStructWithLongDouble@@YAXPEAUS3@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 9
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 10
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 11
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 12
// WINDOWS-NEXT:   store i8 0, ptr %4, align 4
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %6, align 2
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %0, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   ret void
//
void testStructWithLongDouble(S3 *s) {
  // "long double data[0-9]", PAD [10-15], "b", PAD [17-31]
  __builtin_clear_padding(s);
}

struct B {
  int i;
};
struct S4 : Empty, B {
  bool b;
};

// LINUX-LABEL: define dso_local void @_Z23testStructWithEmptyBaseP2S4(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 2
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testStructWithEmptyBase@@YAXPEAUS4@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   ret void
//
void testStructWithEmptyBase(S4 *s) {
  // "i" [0-3], "b" [4], PAD [5-7]
  __builtin_clear_padding(s);
}

struct B1 {
  char c1;
};
struct B2 {
  alignas(4) char c2;
};
struct S5 : B1, B2 {
};

// LINUX-LABEL: define dso_local void @_Z23testPaddingBetweenBasesP2S5(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 2
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 2
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testPaddingBetweenBases@@YAXPEAUS5@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 2
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %5, align 2
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   ret void
//
void testPaddingBetweenBases(S5 *s) {
  // "c1" [0], PAD [1-3] , "c2" [4], PAD [5-7]
  __builtin_clear_padding(s);
}

struct B3 {
  char c1;
};

struct B4 {
  char c2;
};

struct S6 : B3, B4 {
  alignas(4) char c3;
};

// LINUX-LABEL: define dso_local void @_Z24testPaddingAfterLastBaseP2S6(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 2
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 2
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testPaddingAfterLastBase@@YAXPEAUS6@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 2
// WINDOWS-NEXT:   store i8 0, ptr %1, align 2
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %4, align 2
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   ret void
//
void testPaddingAfterLastBase(S6 *s) {
  // "c1"[0], "c2"[1], PAD [2-3], "c3" [4], PAD [5-7]
  __builtin_clear_padding(s);
}


struct VirtualBase {
  unsigned int x;
  virtual int call() { return x; };
  virtual ~VirtualBase() = default;
};

struct NonVirtualBase {
  char y;
};

struct S7 : VirtualBase, NonVirtualBase {
  virtual int call() override { return 5; }
  bool z;
};

// LINUX-LABEL: define dso_local void @_Z10testVtable2S7(
// LINUX-SAME: ptr noundef align 8 [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_INDIRECT_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[S]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 2
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testVtable@@YAXUS7@@@Z"(ptr noundef align 8 dead_on_return %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.indirect_addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.indirect_addr, align 8
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %s, i32 12
// WINDOWS-NEXT:   store i8 0, ptr %0, align 4
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %s, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %s, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %s, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %s, i32 18
// WINDOWS-NEXT:   store i8 0, ptr %4, align 2
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %s, i32 19
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %s, i32 20
// WINDOWS-NEXT:   store i8 0, ptr %6, align 4
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %s, i32 21
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   %8 = getelementptr i8, ptr %s, i32 22
// WINDOWS-NEXT:   store i8 0, ptr %8, align 2
// WINDOWS-NEXT:   %9 = getelementptr i8, ptr %s, i32 23
// WINDOWS-NEXT:   store i8 0, ptr %9, align 1
// WINDOWS-NEXT:   call void @"??1S7@@UEAA@XZ"(ptr noundef nonnull align 8 dead_on_return(24) dereferenceable(24) %s) #1
// WINDOWS-NEXT:   ret void
//
void testVtable(S7 s) {
  // "vtable ptr" [0-7], "x" [8-11], "y" [12], "z" [13], PAD [14-15]
  __builtin_clear_padding(&s);
}

struct VirtualBase1 {
  unsigned int x1;
  virtual int call1() { return x1; };
  virtual ~VirtualBase1() = default;
};

struct VirtualBase2 {
  unsigned int x2;
  virtual int call2() { return x2; };
  virtual ~VirtualBase2() = default;
};

struct VirtualBase3 {
  unsigned int x3;
  virtual int call3() { return x3; };
  virtual ~VirtualBase3() = default;
};

struct NonVirtualBase1 {
  char y;
};
struct S8 : VirtualBase1, VirtualBase2, NonVirtualBase1, VirtualBase3 {
  virtual int call1() override { return 5; }
  bool z;
};

// LINUX-LABEL: define dso_local void @_Z23testMultipleBasesVtable2S8(
// LINUX-SAME: ptr noundef align 8 [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_INDIRECT_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[S]], i32 12
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 4
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[S]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 2
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[S]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[S]], i32 29
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[S]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[S]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[S]], i32 45
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 1
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[S]], i32 46
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 2
// LINUX-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[S]], i32 47
// LINUX-NEXT:    store i8 0, ptr [[TMP9]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testMultipleBasesVtable@@YAXUS8@@@Z"(ptr noundef align 8 dead_on_return %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.indirect_addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.indirect_addr, align 8
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %s, i32 12
// WINDOWS-NEXT:   store i8 0, ptr %0, align 4
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %s, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %s, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %s, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %s, i32 28
// WINDOWS-NEXT:   store i8 0, ptr %4, align 4
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %s, i32 29
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %s, i32 30
// WINDOWS-NEXT:   store i8 0, ptr %6, align 2
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %s, i32 31
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   %8 = getelementptr i8, ptr %s, i32 44
// WINDOWS-NEXT:   store i8 0, ptr %8, align 4
// WINDOWS-NEXT:   %9 = getelementptr i8, ptr %s, i32 45
// WINDOWS-NEXT:   store i8 0, ptr %9, align 1
// WINDOWS-NEXT:   %10 = getelementptr i8, ptr %s, i32 46
// WINDOWS-NEXT:   store i8 0, ptr %10, align 2
// WINDOWS-NEXT:   %11 = getelementptr i8, ptr %s, i32 47
// WINDOWS-NEXT:   store i8 0, ptr %11, align 1
// WINDOWS-NEXT:   %12 = getelementptr i8, ptr %s, i32 50
// WINDOWS-NEXT:   store i8 0, ptr %12, align 2
// WINDOWS-NEXT:   %13 = getelementptr i8, ptr %s, i32 51
// WINDOWS-NEXT:   store i8 0, ptr %13, align 1
// WINDOWS-NEXT:   %14 = getelementptr i8, ptr %s, i32 52
// WINDOWS-NEXT:   store i8 0, ptr %14, align 4
// WINDOWS-NEXT:   %15 = getelementptr i8, ptr %s, i32 53
// WINDOWS-NEXT:   store i8 0, ptr %15, align 1
// WINDOWS-NEXT:   %16 = getelementptr i8, ptr %s, i32 54
// WINDOWS-NEXT:   store i8 0, ptr %16, align 2
// WINDOWS-NEXT:   %17 = getelementptr i8, ptr %s, i32 55
// WINDOWS-NEXT:   store i8 0, ptr %17, align 1
// WINDOWS-NEXT:   call void @"??1S8@@UEAA@XZ"(ptr noundef nonnull align 8 dead_on_return(56) dereferenceable(56) %s) #1
// WINDOWS-NEXT:   ret void
//
void testMultipleBasesVtable(S8 s) {
  // "vtable ptr" [0-7], "x1" [8-11], PAD "[12-15]",
  // "vtable ptr" [16-23], "x2" [24-27], "y" [28], PAD "[29-31]",
  // "vtable_ptr" [32-39], "x3" [40-43], "z" [44], PAD [45-47]
  __builtin_clear_padding(&s);
}

struct VirtualChain1 {
  unsigned int x1;
  virtual int call1() { return x1; };
  virtual ~VirtualChain1() = default;
};

struct VirtualChain2 : VirtualChain1 {
  unsigned int x2;
  virtual int call2() { return x2; };
  virtual ~VirtualChain2() = default;
};

struct VirtualChain3 : VirtualChain2 {
  unsigned int x3;
  virtual int call3() { return x3; };
  virtual ~VirtualChain3() = default;
};

struct NonVirtualBase2 {
  char y;
};

struct S9 : NonVirtualBase2, VirtualChain3 {
  bool z;
};

// LINUX-LABEL: define dso_local void @_Z16testVirtualChain2S9(
// LINUX-SAME: ptr noundef align 8 [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_INDIRECT_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[S]], i32 22
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 2
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i32 23
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testVirtualChain@@YAXUS9@@@Z"(ptr noundef align 8 dead_on_return %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.indirect_addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.indirect_addr, align 8
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %s, i32 12
// WINDOWS-NEXT:   store i8 0, ptr %0, align 4
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %s, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %s, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %s, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %s, i32 20
// WINDOWS-NEXT:   store i8 0, ptr %4, align 4
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %s, i32 21
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %s, i32 22
// WINDOWS-NEXT:   store i8 0, ptr %6, align 2
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %s, i32 23
// WINDOWS-NEXT:   store i8 0, ptr %7, align 1
// WINDOWS-NEXT:   %8 = getelementptr i8, ptr %s, i32 28
// WINDOWS-NEXT:   store i8 0, ptr %8, align 4
// WINDOWS-NEXT:   %9 = getelementptr i8, ptr %s, i32 29
// WINDOWS-NEXT:   store i8 0, ptr %9, align 1
// WINDOWS-NEXT:   %10 = getelementptr i8, ptr %s, i32 30
// WINDOWS-NEXT:   store i8 0, ptr %10, align 2
// WINDOWS-NEXT:   %11 = getelementptr i8, ptr %s, i32 31
// WINDOWS-NEXT:   store i8 0, ptr %11, align 1
// WINDOWS-NEXT:   %12 = getelementptr i8, ptr %s, i32 34
// WINDOWS-NEXT:   store i8 0, ptr %12, align 2
// WINDOWS-NEXT:   %13 = getelementptr i8, ptr %s, i32 35
// WINDOWS-NEXT:   store i8 0, ptr %13, align 1
// WINDOWS-NEXT:   %14 = getelementptr i8, ptr %s, i32 36
// WINDOWS-NEXT:   store i8 0, ptr %14, align 4
// WINDOWS-NEXT:   %15 = getelementptr i8, ptr %s, i32 37
// WINDOWS-NEXT:   store i8 0, ptr %15, align 1
// WINDOWS-NEXT:   %16 = getelementptr i8, ptr %s, i32 38
// WINDOWS-NEXT:   store i8 0, ptr %16, align 2
// WINDOWS-NEXT:   %17 = getelementptr i8, ptr %s, i32 39
// WINDOWS-NEXT:   store i8 0, ptr %17, align 1
// WINDOWS-NEXT:   call void @"??1S9@@UEAA@XZ"(ptr noundef nonnull align 8 dead_on_return(40) dereferenceable(40) %s) #1
// WINDOWS-NEXT:   ret void
//
void testVirtualChain(S9 s) {
  // This should clear the padding after the bool z.
  // base reordered
  // "vtable ptr" [0-7],  "x1" [8-11], x2 [12-15], x3 [16-19],
  // y [20], z [21], PAD [22-23]
  __builtin_clear_padding(&s);
}


struct Base {
  int x;
};

struct D1 : virtual Base {
  int d1;
  bool b1;
};
struct D2 : virtual Base {
  int d2;
  bool b2;
};

struct S10 : D1, D2 {
  bool s;
};

// LINUX-LABEL: define dso_local void @_Z22testVirtualInheritance3S10(
// LINUX-SAME: ptr noundef align 8 dead_on_return [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_INDIRECT_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[S]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 1
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[S]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[S]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 2
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[S]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[S]], i32 36
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 4
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[S]], i32 37
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[S]], i32 38
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 2
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[S]], i32 39
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testVirtualInheritance@@YAXUS10@@@Z"(ptr noundef align 8 dead_on_return %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.indirect_addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.indirect_addr, align 8
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %s, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %0, align 1
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %s, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %1, align 2
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %s, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %s, i32 29
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %s, i32 30
// WINDOWS-NEXT:   store i8 0, ptr %4, align 2
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %s, i32 31
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %s, i32 33
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %s, i32 34
// WINDOWS-NEXT:   store i8 0, ptr %7, align 2
// WINDOWS-NEXT:   %8 = getelementptr i8, ptr %s, i32 35
// WINDOWS-NEXT:   store i8 0, ptr %8, align 1
// WINDOWS-NEXT:   %9 = getelementptr i8, ptr %s, i32 36
// WINDOWS-NEXT:   store i8 0, ptr %9, align 4
// WINDOWS-NEXT:   %10 = getelementptr i8, ptr %s, i32 37
// WINDOWS-NEXT:   store i8 0, ptr %10, align 1
// WINDOWS-NEXT:   %11 = getelementptr i8, ptr %s, i32 38
// WINDOWS-NEXT:   store i8 0, ptr %11, align 2
// WINDOWS-NEXT:   %12 = getelementptr i8, ptr %s, i32 39
// WINDOWS-NEXT:   store i8 0, ptr %12, align 1
// WINDOWS-NEXT:   %13 = getelementptr i8, ptr %s, i32 44
// WINDOWS-NEXT:   store i8 0, ptr %13, align 4
// WINDOWS-NEXT:   %14 = getelementptr i8, ptr %s, i32 45
// WINDOWS-NEXT:   store i8 0, ptr %14, align 1
// WINDOWS-NEXT:   %15 = getelementptr i8, ptr %s, i32 46
// WINDOWS-NEXT:   store i8 0, ptr %15, align 2
// WINDOWS-NEXT:   %16 = getelementptr i8, ptr %s, i32 47
// WINDOWS-NEXT:   store i8 0, ptr %16, align 1
// WINDOWS-NEXT:   ret void
//
void testVirtualInheritance(S10 s) {
  // note derived member placed before the virtual base
  // "vtable ptr" [0-7],  "d1" [8-11], "b1" [12], PAD [13-15],
  // "vtable ptr" [16-23],  "d2" [24-27], "b2" [28], s [29],  PAD [30-31],
  // "x" [32-35], PAD [36-39]
  __builtin_clear_padding(&s);
}

struct S10_2 : virtual Base {
  int d1;
  bool b;
  virtual ~S10_2() = default;
};

// LINUX-LABEL: define dso_local void @_Z40testVirtualInheritanceAndVirtualFunction5S10_2(
// LINUX-SAME: ptr noundef align 8 [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_INDIRECT_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[S]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 1
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[S]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[S]], i32 20
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 4
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[S]], i32 21
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[S]], i32 22
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[S]], i32 23
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testVirtualInheritanceAndVirtualFunction@@YAXUS10_2@@@Z"(ptr noundef align 8 dead_on_return %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.indirect_addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.indirect_addr, align 8
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %s, i32 21
// WINDOWS-NEXT:   store i8 0, ptr %0, align 1
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %s, i32 22
// WINDOWS-NEXT:   store i8 0, ptr %1, align 2
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %s, i32 23
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %s, i32 28
// WINDOWS-NEXT:   store i8 0, ptr %3, align 4
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %s, i32 29
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %s, i32 30
// WINDOWS-NEXT:   store i8 0, ptr %5, align 2
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %s, i32 31
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   call void @"??_DS10_2@@QEAAXXZ"(ptr noundef nonnull align 8 dereferenceable(24) %s) #1
// WINDOWS-NEXT:   ret void
//
void testVirtualInheritanceAndVirtualFunction(S10_2 s) {
  __builtin_clear_padding(&s);
}

struct S11 {
  // will usually occupy 2 bytes:
  unsigned char b1 : 3; // 1st 3 bits (in 1st byte) are b1
  unsigned char b2 : 2; // next 2 bits (in 1st byte). The rest bits in byte 1 are unused
  unsigned char b3 : 6; // 6 bits for b3 - doesn't fit into the 1st byte => starts a 2nd
  unsigned char b4 : 2; // 2 bits for b4 - next (and final) bits in the 2nd byte
};

// LINUX-LABEL: define dso_local void @_Z13testBitFieldsP3S11(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], 31
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testBitFields@@YAXPEAUS11@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 1
// WINDOWS-NEXT:   %3 = and i8 %2, 31
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 1
// WINDOWS-NEXT:   ret void
//
void testBitFields(S11 *s) {
  // "b1" [0-2], "b2" [3-4], PAD [5-7], "b3" [8-13], "b4" [14-15]
  // to clear 5-7, we should AND 0b00011111 (31)
  __builtin_clear_padding(s);
}


// LINUX-LABEL: define dso_local void @_Z18testArrayNoPaddingv(
// LINUX-SAME: ) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[I:%.*]] = alloca [4 x i32], align 16
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testArrayNoPadding@@YAXXZ"() #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %i = alloca [4 x i32], align 4
// WINDOWS-NEXT:   ret void
//
void testArrayNoPadding() {
  int i[4];
  // there is no padding in the array.
  __builtin_clear_padding(&i);
}

// LINUX-LABEL: define dso_local void @_Z19testArrayLongDoublev(
// LINUX-SAME: ) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[LD:%.*]] = alloca [2 x x86_fp80], align 16
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[LD]], i32 10
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 2
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[LD]], i32 11
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[LD]], i32 12
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 4
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[LD]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[LD]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 2
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[LD]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[LD]], i32 26
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 2
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[LD]], i32 27
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 1
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[LD]], i32 28
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 4
// LINUX-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[LD]], i32 29
// LINUX-NEXT:    store i8 0, ptr [[TMP9]], align 1
// LINUX-NEXT:    [[TMP10:%.*]] = getelementptr i8, ptr [[LD]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP10]], align 2
// LINUX-NEXT:    [[TMP11:%.*]] = getelementptr i8, ptr [[LD]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP11]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testArrayLongDouble@@YAXXZ"() #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %ld = alloca [2 x double], align 8
// WINDOWS-NEXT:   ret void
//
void testArrayLongDouble() {
  // long double 0, [0-9] PAD [10-15]
  // long double 1, [16-25] PAD [26-31]
  long double ld[2];
  __builtin_clear_padding(&ld);
}

// LINUX-LABEL: define dso_local void @_Z17testArrayOfStructv(
// LINUX-SAME: ) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S:%.*]] = alloca [2 x [[STRUCT_S_0:%.*]]], align 16
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[S]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 1
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[S]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[S]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[S]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 2
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[S]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[S]], i32 21
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[S]], i32 22
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 2
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[S]], i32 23
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 1
// LINUX-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[S]], i32 29
// LINUX-NEXT:    store i8 0, ptr [[TMP9]], align 1
// LINUX-NEXT:    [[TMP10:%.*]] = getelementptr i8, ptr [[S]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP10]], align 2
// LINUX-NEXT:    [[TMP11:%.*]] = getelementptr i8, ptr [[S]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP11]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testArrayOfStruct@@YAXXZ"() #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s = alloca [2 x %struct.S.0], align 4
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %s, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %0, align 1
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %s, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %1, align 2
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %s, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %s, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %s, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %4, align 2
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %s, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %5, align 1
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %s, i32 21
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %s, i32 22
// WINDOWS-NEXT:   store i8 0, ptr %7, align 2
// WINDOWS-NEXT:   %8 = getelementptr i8, ptr %s, i32 23
// WINDOWS-NEXT:   store i8 0, ptr %8, align 1
// WINDOWS-NEXT:   %9 = getelementptr i8, ptr %s, i32 29
// WINDOWS-NEXT:   store i8 0, ptr %9, align 1
// WINDOWS-NEXT:   %10 = getelementptr i8, ptr %s, i32 30
// WINDOWS-NEXT:   store i8 0, ptr %10, align 2
// WINDOWS-NEXT:   %11 = getelementptr i8, ptr %s, i32 31
// WINDOWS-NEXT:   store i8 0, ptr %11, align 1
// WINDOWS-NEXT:   ret void
//
void testArrayOfStruct() {
  struct S {
    int i1;
    char c1;
    int i2;
    char c2;
  };

  // S[0].i1 [0-3], S[0].c1 [4], PAD [5-7],
  // S[0].i2 [8-11], S[0].c2 [12], PAD [13-15],
  // S[1].i1 [16-19], S[1].c1 [20], PAD [21-23],
  // S[1].i2 [24-27], S[1].c2 [28], PAD [29-31]

  S s[2];
  __builtin_clear_padding(&s);
}

struct ArrOfStructsWithPadding {
  Bar bars[2];
};

// ArrOfStructsWithPadding structure:
// "c" (1), PAD_1, "d" (1), PAD_2, "c" (2), PAD_3, "d" (2), PAD_4
// %struct.ArrOfStructsWithPadding = type { [2 x %struct.Bar] }

// LINUX-LABEL: define dso_local void @_Z27testArrOfStructsWithPaddingP23ArrOfStructsWithPadding(
// LINUX-SAME: ptr noundef [[ARR:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[ARR_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[ARR]], ptr [[ARR_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARR_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testArrOfStructsWithPadding@@YAXPEAUArrOfStructsWithPadding@@@Z"(ptr noundef %arr) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %arr.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %arr, ptr %arr.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %arr.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   ret void
//
void testArrOfStructsWithPadding(ArrOfStructsWithPadding *arr) {
  __builtin_clear_padding(arr);
}

template <class T>
struct S12 {
  T t;
  char c;
};

// LINUX-LABEL: define dso_local void @_Z18testTemplateStructP3S12IiE(
// LINUX-SAME: ptr noundef [[S12:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S12_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S12]], ptr [[S12_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S12_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 2
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testTemplateStruct@@YAXPEAU?$S12@H@@@Z"(ptr noundef %s12) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s12.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s12, ptr %s12.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s12.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %2, align 2
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %3, align 1
// WINDOWS-NEXT:   ret void
//
void testTemplateStruct(S12<int>* s12) {
  __builtin_clear_padding(s12);
}

// LINUX-LABEL: define dso_local void @_Z10testAtomicPU7_Atomic3Bar(
// LINUX-SAME: ptr noundef [[BAR:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[BAR_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[BAR]], ptr [[BAR_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BAR_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testAtomic@@YAXPEAU?$_Atomic@UBar@@@__clang@@@Z"(ptr noundef %bar) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %bar.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %bar, ptr %bar.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %bar.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %1, align 1
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   ret void
//
void testAtomic(_Atomic(Bar)* bar) {
  __builtin_clear_padding(bar);
}


struct NonTriviallyCopyable {
  int i;
  char c;

  NonTriviallyCopyable(){}
  NonTriviallyCopyable(const NonTriviallyCopyable&) {}
  ~NonTriviallyCopyable() {}
};

// LINUX-LABEL: define dso_local void @_Z24testNonTriviallyCopyable20NonTriviallyCopyable(
// LINUX-SAME: ptr noundef align 4 [[NTC:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[NTC_INDIRECT_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[NTC]], ptr [[NTC_INDIRECT_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[NTC]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP0]], align 1
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[NTC]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[NTC]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testNonTriviallyCopyable@@YAXUNonTriviallyCopyable@@@Z"(ptr noundef align 4 dead_on_return %ntc) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %ntc.indirect_addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %ntc, ptr %ntc.indirect_addr, align 8
// WINDOWS-NEXT:   %0 = getelementptr i8, ptr %ntc, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %0, align 1
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %ntc, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %1, align 2
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %ntc, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   call void @"??1NonTriviallyCopyable@@QEAA@XZ"(ptr noundef nonnull align 4 dead_on_return(8) dereferenceable(8) %ntc) #1
// WINDOWS-NEXT:   ret void
//
void testNonTriviallyCopyable(NonTriviallyCopyable ntc) {
  __builtin_clear_padding(&ntc);
}

typedef float Float3Vec __attribute__((ext_vector_type(3)));
typedef long double LongDouble3Vec __attribute__((ext_vector_type(3)));

// LINUX-LABEL: define dso_local void @_Z18testAttributedTypePDv3_f(
// LINUX-SAME: ptr noundef [[V:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[V_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[V]], ptr [[V_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[V_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 12
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 4
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 13
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 14
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 2
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 15
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testAttributedType@@YAXPEAT?$__vector@M$02@__clang@@@Z"(ptr noundef %v) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %v.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %v, ptr %v.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %v.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 12
// WINDOWS-NEXT:   store i8 0, ptr %1, align 4
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 13
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 14
// WINDOWS-NEXT:   store i8 0, ptr %3, align 2
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 15
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   ret void
//
void testAttributedType(Float3Vec* v) {
  __builtin_clear_padding(v);
}

// LINUX-LABEL: define dso_local void @_Z28testAttributedLongDoubleTypePDv3_e(
// LINUX-SAME: ptr noundef [[V:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[V_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[V]], ptr [[V_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[V_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 30
// LINUX-NEXT:    store i8 0, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i32 31
// LINUX-NEXT:    store i8 0, ptr [[TMP2]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i32 32
// LINUX-NEXT:    store i8 0, ptr [[TMP3]], align 32
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 33
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 34
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 35
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 36
// LINUX-NEXT:    store i8 0, ptr [[TMP7]], align 4
// LINUX-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[TMP0]], i32 37
// LINUX-NEXT:    store i8 0, ptr [[TMP8]], align 1
// LINUX-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[TMP0]], i32 38
// LINUX-NEXT:    store i8 0, ptr [[TMP9]], align 2
// LINUX-NEXT:    [[TMP10:%.*]] = getelementptr i8, ptr [[TMP0]], i32 39
// LINUX-NEXT:    store i8 0, ptr [[TMP10]], align 1
// LINUX-NEXT:    [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i32 40
// LINUX-NEXT:    store i8 0, ptr [[TMP11]], align 8
// LINUX-NEXT:    [[TMP12:%.*]] = getelementptr i8, ptr [[TMP0]], i32 41
// LINUX-NEXT:    store i8 0, ptr [[TMP12]], align 1
// LINUX-NEXT:    [[TMP13:%.*]] = getelementptr i8, ptr [[TMP0]], i32 42
// LINUX-NEXT:    store i8 0, ptr [[TMP13]], align 2
// LINUX-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[TMP0]], i32 43
// LINUX-NEXT:    store i8 0, ptr [[TMP14]], align 1
// LINUX-NEXT:    [[TMP15:%.*]] = getelementptr i8, ptr [[TMP0]], i32 44
// LINUX-NEXT:    store i8 0, ptr [[TMP15]], align 4
// LINUX-NEXT:    [[TMP16:%.*]] = getelementptr i8, ptr [[TMP0]], i32 45
// LINUX-NEXT:    store i8 0, ptr [[TMP16]], align 1
// LINUX-NEXT:    [[TMP17:%.*]] = getelementptr i8, ptr [[TMP0]], i32 46
// LINUX-NEXT:    store i8 0, ptr [[TMP17]], align 2
// LINUX-NEXT:    [[TMP18:%.*]] = getelementptr i8, ptr [[TMP0]], i32 47
// LINUX-NEXT:    store i8 0, ptr [[TMP18]], align 1
// LINUX-NEXT:    [[TMP19:%.*]] = getelementptr i8, ptr [[TMP0]], i32 48
// LINUX-NEXT:    store i8 0, ptr [[TMP19]], align 16
// LINUX-NEXT:    [[TMP20:%.*]] = getelementptr i8, ptr [[TMP0]], i32 49
// LINUX-NEXT:    store i8 0, ptr [[TMP20]], align 1
// LINUX-NEXT:    [[TMP21:%.*]] = getelementptr i8, ptr [[TMP0]], i32 50
// LINUX-NEXT:    store i8 0, ptr [[TMP21]], align 2
// LINUX-NEXT:    [[TMP22:%.*]] = getelementptr i8, ptr [[TMP0]], i32 51
// LINUX-NEXT:    store i8 0, ptr [[TMP22]], align 1
// LINUX-NEXT:    [[TMP23:%.*]] = getelementptr i8, ptr [[TMP0]], i32 52
// LINUX-NEXT:    store i8 0, ptr [[TMP23]], align 4
// LINUX-NEXT:    [[TMP24:%.*]] = getelementptr i8, ptr [[TMP0]], i32 53
// LINUX-NEXT:    store i8 0, ptr [[TMP24]], align 1
// LINUX-NEXT:    [[TMP25:%.*]] = getelementptr i8, ptr [[TMP0]], i32 54
// LINUX-NEXT:    store i8 0, ptr [[TMP25]], align 2
// LINUX-NEXT:    [[TMP26:%.*]] = getelementptr i8, ptr [[TMP0]], i32 55
// LINUX-NEXT:    store i8 0, ptr [[TMP26]], align 1
// LINUX-NEXT:    [[TMP27:%.*]] = getelementptr i8, ptr [[TMP0]], i32 56
// LINUX-NEXT:    store i8 0, ptr [[TMP27]], align 8
// LINUX-NEXT:    [[TMP28:%.*]] = getelementptr i8, ptr [[TMP0]], i32 57
// LINUX-NEXT:    store i8 0, ptr [[TMP28]], align 1
// LINUX-NEXT:    [[TMP29:%.*]] = getelementptr i8, ptr [[TMP0]], i32 58
// LINUX-NEXT:    store i8 0, ptr [[TMP29]], align 2
// LINUX-NEXT:    [[TMP30:%.*]] = getelementptr i8, ptr [[TMP0]], i32 59
// LINUX-NEXT:    store i8 0, ptr [[TMP30]], align 1
// LINUX-NEXT:    [[TMP31:%.*]] = getelementptr i8, ptr [[TMP0]], i32 60
// LINUX-NEXT:    store i8 0, ptr [[TMP31]], align 4
// LINUX-NEXT:    [[TMP32:%.*]] = getelementptr i8, ptr [[TMP0]], i32 61
// LINUX-NEXT:    store i8 0, ptr [[TMP32]], align 1
// LINUX-NEXT:    [[TMP33:%.*]] = getelementptr i8, ptr [[TMP0]], i32 62
// LINUX-NEXT:    store i8 0, ptr [[TMP33]], align 2
// LINUX-NEXT:    [[TMP34:%.*]] = getelementptr i8, ptr [[TMP0]], i32 63
// LINUX-NEXT:    store i8 0, ptr [[TMP34]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testAttributedLongDoubleType@@YAXPEAT?$__vector@O$02@__clang@@@Z"(ptr noundef %v) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %v.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %v, ptr %v.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %v.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 24
// WINDOWS-NEXT:   store i8 0, ptr %1, align 8
// WINDOWS-NEXT:   %2 = getelementptr i8, ptr %0, i32 25
// WINDOWS-NEXT:   store i8 0, ptr %2, align 1
// WINDOWS-NEXT:   %3 = getelementptr i8, ptr %0, i32 26
// WINDOWS-NEXT:   store i8 0, ptr %3, align 2
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 27
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 28
// WINDOWS-NEXT:   store i8 0, ptr %5, align 4
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 29
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %0, i32 30
// WINDOWS-NEXT:   store i8 0, ptr %7, align 2
// WINDOWS-NEXT:   %8 = getelementptr i8, ptr %0, i32 31
// WINDOWS-NEXT:   store i8 0, ptr %8, align 1
// WINDOWS-NEXT:   ret void
//
void testAttributedLongDoubleType(LongDouble3Vec *v) {
  // long double elements occupy [0-9], [16-25], [32-41] on x86.
  __builtin_clear_padding(v);
}

struct UnnamedBitfieldSingleBit {
  unsigned char a : 3;
  unsigned char   : 1;
  unsigned char b : 4;
};

// LINUX-LABEL: define dso_local void @_Z28testUnnamedBitfieldSingleBitP24UnnamedBitfieldSingleBit(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], -9
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnnamedBitfieldSingleBit@@YAXPEAUUnnamedBitfieldSingleBit@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 1
// WINDOWS-NEXT:   %3 = and i8 %2, -9
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 1
// WINDOWS-NEXT:   ret void
//
void testUnnamedBitfieldSingleBit(struct UnnamedBitfieldSingleBit *s) {
  // byte 0: a[bits 0-2], unnamed[bit 3], b[bits 4-7]
  // bit 3 must be cleared
  // Mask: 0b11110111 == -9
  __builtin_clear_padding(s);
}

struct UnnamedBitfieldMiddle {
  unsigned char a : 3;
  unsigned char   : 2;
  unsigned char b : 3;
};

// LINUX-LABEL: define dso_local void @_Z25testUnnamedBitfieldMiddleP21UnnamedBitfieldMiddle(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], -25
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnnamedBitfieldMiddle@@YAXPEAUUnnamedBitfieldMiddle@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 1
// WINDOWS-NEXT:   %3 = and i8 %2, -25
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 1
// WINDOWS-NEXT:   ret void
//
void testUnnamedBitfieldMiddle(struct UnnamedBitfieldMiddle *s) {
  // byte 0: a[0-2], unnamed[3-4], b[5-7]
  // bits 3-4 must be cleared
  // Mask: 0b11100111 == -25
  __builtin_clear_padding(s);
}

struct UnnamedBitfieldSurrounding {
  unsigned char   : 2;
  unsigned char a : 4;
  unsigned char   : 2;
};

// LINUX-LABEL: define dso_local void @_Z30testUnnamedBitfieldSurroundingP26UnnamedBitfieldSurrounding(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], -4
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 1
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP5:%.*]] = load i8, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = and i8 [[TMP5]], 63
// LINUX-NEXT:    store i8 [[TMP6]], ptr [[TMP4]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnnamedBitfieldSurrounding@@YAXPEAUUnnamedBitfieldSurrounding@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 1
// WINDOWS-NEXT:   %3 = and i8 %2, -4
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 1
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %5 = load i8, ptr %4, align 1
// WINDOWS-NEXT:   %6 = and i8 %5, 63
// WINDOWS-NEXT:   store i8 %6, ptr %4, align 1
// WINDOWS-NEXT:   ret void
//
void testUnnamedBitfieldSurrounding(struct UnnamedBitfieldSurrounding *s) {
  // byte 0: unnamed[0-1], a[2-5], unnamed[6-7]
  // bits 0-1 and 6-7 must be cleared
  // Masks:
  //   0b11111100 == -4
  //   0b00111111 == 63
  __builtin_clear_padding(s);
}

struct UnnamedZeroWidthBitfield {
  unsigned char a : 4;
  unsigned int  : 0;
  unsigned int b : 4;
};

// LINUX-LABEL: define dso_local void @_Z28testUnnamedZeroWidthBitfieldP24UnnamedZeroWidthBitfield(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 4
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], 15
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 4
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    store i8 0, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i32 2
// LINUX-NEXT:    store i8 0, ptr [[TMP5]], align 2
// LINUX-NEXT:    [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i32 3
// LINUX-NEXT:    store i8 0, ptr [[TMP6]], align 1
// LINUX-NEXT:    [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i32 4
// LINUX-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP7]], align 4
// LINUX-NEXT:    [[TMP9:%.*]] = and i8 [[TMP8]], 15
// LINUX-NEXT:    store i8 [[TMP9]], ptr [[TMP7]], align 4
// LINUX-NEXT:    [[TMP10:%.*]] = getelementptr i8, ptr [[TMP0]], i32 5
// LINUX-NEXT:    store i8 0, ptr [[TMP10]], align 1
// LINUX-NEXT:    [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i32 6
// LINUX-NEXT:    store i8 0, ptr [[TMP11]], align 2
// LINUX-NEXT:    [[TMP12:%.*]] = getelementptr i8, ptr [[TMP0]], i32 7
// LINUX-NEXT:    store i8 0, ptr [[TMP12]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnnamedZeroWidthBitfield@@YAXPEAUUnnamedZeroWidthBitfield@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 4
// WINDOWS-NEXT:   %3 = and i8 %2, 15
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 4
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   store i8 0, ptr %4, align 1
// WINDOWS-NEXT:   %5 = getelementptr i8, ptr %0, i32 2
// WINDOWS-NEXT:   store i8 0, ptr %5, align 2
// WINDOWS-NEXT:   %6 = getelementptr i8, ptr %0, i32 3
// WINDOWS-NEXT:   store i8 0, ptr %6, align 1
// WINDOWS-NEXT:   %7 = getelementptr i8, ptr %0, i32 4
// WINDOWS-NEXT:   %8 = load i8, ptr %7, align 4
// WINDOWS-NEXT:   %9 = and i8 %8, 15
// WINDOWS-NEXT:   store i8 %9, ptr %7, align 4
// WINDOWS-NEXT:   %10 = getelementptr i8, ptr %0, i32 5
// WINDOWS-NEXT:   store i8 0, ptr %10, align 1
// WINDOWS-NEXT:   %11 = getelementptr i8, ptr %0, i32 6
// WINDOWS-NEXT:   store i8 0, ptr %11, align 2
// WINDOWS-NEXT:   %12 = getelementptr i8, ptr %0, i32 7
// WINDOWS-NEXT:   store i8 0, ptr %12, align 1
// WINDOWS-NEXT:   ret void
//
void testUnnamedZeroWidthBitfield(struct UnnamedZeroWidthBitfield *s) {
  // byte 0: a[0-3], unnamed[4-7]
  // bytes 1-3: struct padding
  // bytes 4-7: b[bits 0-3], tail padding[bits 4-31]
  //
  // byte 0:   clear bits 4-7
  //           mask: 0b00001111 == 15
  //
  // byte 1-3: clear all bits
  //           3 x store i8 0
  //
  // byte 4-7: clear bits 4-31
  //           mask: 0b00001111 == 15
  //           3 x store i8 0
  __builtin_clear_padding(s);
}

struct UnnamedBitfieldMultiByte {
  unsigned short a : 4;
  unsigned short   : 8;
  unsigned short b : 4;
};

// LINUX-LABEL: define dso_local void @_Z28testUnnamedBitfieldMultiByteP24UnnamedBitfieldMultiByte(
// LINUX-SAME: ptr noundef [[S:%.*]]) #[[ATTR0]] {
// LINUX-NEXT:  [[ENTRY:.*:]]
// LINUX-NEXT:    [[S_ADDR:%.*]] = alloca ptr, align 8
// LINUX-NEXT:    store ptr [[S]], ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8
// LINUX-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0
// LINUX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP3:%.*]] = and i8 [[TMP2]], 15
// LINUX-NEXT:    store i8 [[TMP3]], ptr [[TMP1]], align 2
// LINUX-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i32 1
// LINUX-NEXT:    [[TMP5:%.*]] = load i8, ptr [[TMP4]], align 1
// LINUX-NEXT:    [[TMP6:%.*]] = and i8 [[TMP5]], -16
// LINUX-NEXT:    store i8 [[TMP6]], ptr [[TMP4]], align 1
// LINUX-NEXT:    ret void
//
// WINDOWS-LABEL: define dso_local void @"?testUnnamedBitfieldMultiByte@@YAXPEAUUnnamedBitfieldMultiByte@@@Z"(ptr noundef %s) #0 {
// WINDOWS-NEXT: entry:
// WINDOWS-NEXT:   %s.addr = alloca ptr, align 8
// WINDOWS-NEXT:   store ptr %s, ptr %s.addr, align 8
// WINDOWS-NEXT:   %0 = load ptr, ptr %s.addr, align 8
// WINDOWS-NEXT:   %1 = getelementptr i8, ptr %0, i32 0
// WINDOWS-NEXT:   %2 = load i8, ptr %1, align 2
// WINDOWS-NEXT:   %3 = and i8 %2, 15
// WINDOWS-NEXT:   store i8 %3, ptr %1, align 2
// WINDOWS-NEXT:   %4 = getelementptr i8, ptr %0, i32 1
// WINDOWS-NEXT:   %5 = load i8, ptr %4, align 1
// WINDOWS-NEXT:   %6 = and i8 %5, -16
// WINDOWS-NEXT:   store i8 %6, ptr %4, align 1
// WINDOWS-NEXT:   ret void
//
void testUnnamedBitfieldMultiByte(struct UnnamedBitfieldMultiByte *s) {
  // 2 bytes: a[0-3], unnamed[4-11], b[12-15]
  // byte 0: clear bits 4-7
  // byte 1: clear bits 0-3
  //
  // Masks:
  //   0b00001111 ==  15
  //   0b11110000 == -16
  __builtin_clear_padding(s);
}
