brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 04c9a6d Raw
69 lines · cpp
1// RUN: %clang_cc1 %s -triple=i686-pc-windows-msvc -debug-info-kind=limited -gcodeview -emit-llvm -o - | FileCheck %s2 3// Tests virtual bases in the MS ABI.4 5// CHECK: ![[NoPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "NoPrimaryBase",6// CHECK-SAME: elements: ![[elements:[0-9]+]]7 8// CHECK: ![[elements]] = !{![[NoPrimaryBase_base:[0-9]+]]}9 10// CHECK: ![[NoPrimaryBase_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[NoPrimaryBase]],11// CHECK-SAME: baseType: ![[HasVirtualMethod:[0-9]+]], offset: 4, flags: DIFlagVirtual, extraData: i32 0)12 13// CHECK: ![[HasVirtualMethod]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasVirtualMethod"14 15// CHECK: ![[HasPrimaryBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasPrimaryBase",16// CHECK-SAME: elements: ![[elements:[0-9]+]]17 18// CHECK: ![[elements]] = !{![[SecondaryVTable_base:[0-9]+]], ![[HasVirtualMethod_base:[0-9]+]], ![[vshape:[0-9]+]]}19 20// CHECK: ![[SecondaryVTable_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasPrimaryBase]],21// CHECK-SAME: baseType: ![[SecondaryVTable:[0-9]+]], offset: 4, flags: DIFlagVirtual, extraData: i32 4)22 23// CHECK: ![[SecondaryVTable]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "SecondaryVTable"24 25// CHECK: ![[HasVirtualMethod_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasPrimaryBase]], baseType: ![[HasVirtualMethod]], extraData: i32 0)26 27// CHECK: ![[HasIndirectVirtualBase:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "HasIndirectVirtualBase"28// CHECK-SAME: elements: ![[elements:[0-9]+]]29 30// CHECK: !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasIndirectVirtualBase]], baseType: ![[HasPrimaryBase]]31// CHECK-NOT: DIFlagIndirectVirtualBase32// CHECK-SAME: )33 34// CHECK: !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[HasIndirectVirtualBase]], baseType: ![[SecondaryVTable]]35// CHECK-SAME: flags:36// CHECK-SAME: DIFlagIndirectVirtualBase37 38// CHECK: ![[DynamicNoVFPtr:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "DynamicNoVFPtr",39// CHECK-SAME: elements: ![[elements:[0-9]+]]40 41// CHECK: ![[elements]] = !{![[POD_base:[0-9]+]]}42 43// CHECK: ![[POD_base]] = !DIDerivedType(tag: DW_TAG_inheritance, scope: ![[DynamicNoVFPtr]],44// CHECK-SAME: baseType: ![[POD:[0-9]+]], offset: 4, flags: DIFlagVirtual, extraData: i32 0)45 46// CHECK: ![[POD]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "POD"47 48struct POD { int pod; };49 50struct DynamicNoVFPtr : virtual POD { };51 52DynamicNoVFPtr dynamic_no_vfptr;53 54struct HasVirtualMethod { virtual void f(); };55 56struct NoPrimaryBase : virtual HasVirtualMethod { };57 58NoPrimaryBase no_primary_base;59 60struct SecondaryVTable { virtual void g(); };61 62struct HasPrimaryBase : virtual SecondaryVTable, HasVirtualMethod { };63 64HasPrimaryBase has_primary_base;65 66struct HasIndirectVirtualBase : public HasPrimaryBase {};67 68HasIndirectVirtualBase has_indirect_virtual_base;69