r215141 - Revert "Debug info: Use record layout to find vbase offsets instead of vtables"

David Blaikie dblaikie at gmail.com
Thu Aug 7 13:52:12 PDT 2014


On Thu, Aug 7, 2014 at 1:36 PM, Reid Kleckner <reid at kleckner.net> wrote:
> Author: rnk
> Date: Thu Aug  7 15:36:48 2014
> New Revision: 215141
>
> URL: http://llvm.org/viewvc/llvm-project?rev=215141&view=rev
> Log:
> 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.

Patches welcome? ;)

Yeah, the test coverage isn't great, unfortunately. We try to improve
it as we go.

>
> Modified:
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=215141&r1=215140&r2=215141&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Aug  7 15:36:48 2014
> @@ -1195,7 +1195,9 @@ CollectCXXBases(const CXXRecordDecl *RD,
>      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));
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info.cpp?rev=215141&r1=215140&r2=215141&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info.cpp Thu Aug  7 15:36:48 2014
> @@ -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<typename T> 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 <typename T> class A {
>    struct B;
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list