From: Reid Kleckner Date: Thu, 7 Aug 2014 20:36:48 +0000 (+0000) Subject: Revert "Debug info: Use record layout to find vbase offsets instead of vtables" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=11511190b05d939fd55acf7df02ed2c5febe87c3;p=clang Revert "Debug info: Use record layout to find vbase offsets instead of vtables" This reverts commit r215137. This doesn't work at all, an offset-offset is probably different than an offset. I'm scared that this passed our normal test suite. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215141 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index a736d7de25..ddb8a83887 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -1195,7 +1195,9 @@ CollectCXXBases(const CXXRecordDecl *RD, llvm::DIFile Unit, if (BI.isVirtual()) { // virtual base offset offset is -ve. The code generator emits dwarf // expression where it expects +ve number. - BaseOffset = 0 - RL.getVBaseClassOffset(Base).getQuantity(); + BaseOffset = + 0 - CGM.getItaniumVTableContext() + .getVirtualBaseOffsetOffset(RD, Base).getQuantity(); BFlags = llvm::DIDescriptor::FlagVirtual; } else BaseOffset = CGM.getContext().toBits(RL.getBaseClassOffset(Base)); diff --git a/test/CodeGenCXX/debug-info.cpp b/test/CodeGenCXX/debug-info.cpp index a3b75e2e14..7c89dfc04c 100644 --- a/test/CodeGenCXX/debug-info.cpp +++ b/test/CodeGenCXX/debug-info.cpp @@ -1,6 +1,4 @@ // RUN: %clang_cc1 -triple x86_64-none-linux-gnu -emit-llvm -g %s -o - | FileCheck %s -// RUN: %clang_cc1 -triple i686-pc-windows-msvc -emit-llvm -g %s -o - | FileCheck %s --check-prefix=MSVC - template struct Identity { typedef T Type; }; @@ -45,18 +43,14 @@ namespace VirtualDtor { } namespace VirtualBase { - struct A { int a; }; - struct B : virtual A { int b; }; + struct A { }; + struct B : virtual A { }; void f() { B b; } } -// MSVC: [[VBASE_B:![0-9]+]] = metadata !{i32 {{.*}}, metadata !"B", i32 {{[0-9]*}}, i64 96, i64 32, i32 0, i32 0, null, metadata [[ZZZ:![0-9]+]], i32 0, {{.*}}} ; [ DW_TAG_structure_type ] [B] [line 49, size 96, align 32, offset 0] [def] [from ] -// MSVC: [[ZZZ]] = metadata !{metadata [[VBASE_A_IN_B:![0-9]+]], -// MSVC: [[VBASE_A_IN_B]] = metadata !{i32 786460, null, metadata [[VBASE_B]], null, i32 0, i64 0, i64 0, i64 -8, i32 32, metadata !{{[0-9]*}}} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 18446744073709551608] [from A] - namespace b5249287 { template class A { struct B;