// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ // RUN: | FileCheck %s // Test that large _BitInt fields do not overflow the internal storage unit tracker (previously unsigned char). // If the bug exists, this struct splits into two units. // If fixed, f1 and f2 are packed into a single unit. #pragma ms_struct on struct __attribute__((packed, aligned(1))) A { _BitInt(250) f1 : 2; _BitInt(250) f2 : 2; }; struct __attribute__((packed, aligned(1))) B { _BitInt(500) f1 : 2; _BitInt(500) f2 : 255; }; // CHECK-LABEL: 0 | struct A{{$}} // CHECK-NEXT:0:0-1 | _BitInt(250) f1 // CHECK-NEXT:0:2-3 | _BitInt(250) f2 // CHECK-NEXT: | [sizeof=32, align=1] // CHECK-LABEL: 0 | struct B{{$}} // CHECK-NEXT:0:0-1 | _BitInt(500) f1 // CHECK-NEXT:0:2-256 | _BitInt(500) f2 // CHECK-NEXT: | [sizeof=64, align=1] int x[sizeof(struct A)]; int y[sizeof(struct B)];