// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ // RUN: | FileCheck %s // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ // RUN: | FileCheck %s -check-prefix CHECK-X64 extern "C" int printf(const char *fmt, ...); __declspec(align(4096)) char buffer[4096]; struct AT {}; struct V : AT { char c; V() { printf("V - this: %d\n", (int)((char*)this - buffer)); } }; struct AT0 { union { struct { int a; AT t; } y; int b; } x; char c; AT0() { printf("AT0 - this: %d\n", (int)((char*)this - buffer)); } }; struct AT1 : V { int a; AT1() { printf("AT1 - this: %d\n", (int)((char*)this - buffer)); } }; struct AT2 { AT0 t; char AT2FieldName0; AT2() { printf("AT2 - this: %d\n", (int)((char*)this - buffer)); printf("AT2 - Fiel: %d\n", (int)((char*)&AT2FieldName0 - buffer)); } }; struct AT3 : AT2, AT1 { AT3() { printf("AT3 - this: %d\n", (int)((char*)this - buffer)); } }; // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct AT3 // CHECK-NEXT: 0 | struct AT2 (base) // CHECK-NEXT: 0 | struct AT0 t // CHECK-NEXT: 0 | union AT0::