brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 5145e07 Raw
147 lines · plain
1/* Compile with:2   cat >modules.modulemap <<EOF3     module Foo {4       header "Foo.h"5       export *6     }7     module Bar {8       header "Bar.h"9       export *10     }11EOF12   clang -D BAR_H -E -o Bar.h modules.m13   clang -D FOO_H -E -o Foo.h modules.m14   clang -D ODR_VIOLATION_C -E -o odr_violation.c modules.m15   clang -c -fmodules -fmodule-map-file=modules.modulemap \16     -g -gmodules -fmodules-cache-path=. \17     -Xclang -fdisable-module-hash modules.m -o 1.o18   clang -c -g odr_violation.c -o 2.o19*/20 21// RUN: dsymutil -f -oso-prepend-path=%p/../Inputs/modules \22// RUN:   -y %p/dummy-debug-map.map -o - \23// RUN:     | llvm-dwarfdump -v --debug-info - | FileCheck %s24 25// RUN: dsymutil -f -oso-prepend-path=%p/../Inputs/modules -y \26// RUN:   %p/dummy-debug-map.map -o %t 2>&1 | FileCheck --check-prefix=WARN %s27 28// WARN-NOT: warning: hash mismatch29 30// ---------------------------------------------------------------------31#ifdef BAR_H32// ---------------------------------------------------------------------33// CHECK:            DW_TAG_compile_unit34// CHECK-NOT:          DW_AT_GNU_dwo_id35// CHECK-NOT:        DW_TAG36// CHECK:              DW_TAG_module37// CHECK-NEXT:           DW_AT_name{{.*}}"Bar"38// CHECK: 0x0[[BAR:.*]]: DW_TAG_structure_type39// CHECK-NOT:              DW_TAG40// CHECK:                  DW_AT_name {{.*}}"Bar"41// CHECK-NOT:              DW_TAG42// CHECK:                  DW_TAG_member43// CHECK:                    DW_AT_name {{.*}}"value"44// CHECK:                DW_TAG_structure_type45// CHECK-NOT:              DW_TAG46// CHECK:                  DW_AT_name {{.*}}"PruneMeNot"47 48struct Bar {49  int value;50};51 52struct PruneMeNot;53 54#else55// ---------------------------------------------------------------------56#ifdef FOO_H57// ---------------------------------------------------------------------58// CHECK:               DW_TAG_compile_unit59// CHECK-NOT:             DW_AT_GNU_dwo_id60// CHECK-NOT:             DW_TAG61// CHECK: 0x0[[FOO:.*]]:  DW_TAG_module62// CHECK-NEXT:              DW_AT_name{{.*}}"Foo"63// CHECK-NOT:               DW_TAG64// CHECK: 0x0[[BARTD:.*]]: DW_TAG_typedef65// CHECK-NOT:                 DW_TAG66// CHECK:                     DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[BAR]]67// CHECK:                   DW_TAG_structure_type68// CHECK-NEXT:                DW_AT_name{{.*}}"S"69// CHECK-NOT:                 DW_TAG70// CHECK: 0x0[[INTERFACE:.*]]: DW_TAG_structure_type71// CHECK-NEXT:                DW_AT_name{{.*}}"Foo"72 73@import Bar;74typedef struct Bar Bar;75struct S {};76 77@interface Foo {78  int ivar;79}80@end81 82#else83// ---------------------------------------------------------------------84#ifdef ODR_VIOLATION_C85// ---------------------------------------------------------------------86 87struct Bar {88  int i;89};90typedef struct Bar Bar;91Bar odr_violation = { 42 };92 93// ---------------------------------------------------------------------94#else95// ---------------------------------------------------------------------96 97// CHECK:    DW_TAG_compile_unit98// CHECK-NOT:  DW_AT_GNU_dwo_id99// CHECK:      DW_AT_low_pc100// CHECK-NOT:  DW_TAG_module101// CHECK-NOT:  DW_TAG_typedef102//103// CHECK:   DW_TAG_imported_declaration104// CHECK-NOT: DW_TAG105// CHECK:     DW_AT_import [DW_FORM_ref_addr] (0x{{0*}}[[FOO]]106//107// CHECK:   DW_TAG_subprogram108// CHECK:     DW_AT_name {{.*}}"main"109//110// CHECK:     DW_TAG_variable111// CHECK-NOT:   DW_TAG112// CHECK:       DW_AT_name{{.*}}"bar"113// CHECK-NOT:   DW_TAG114// CHECK:       DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[BARTD]]115// CHECK:     DW_TAG_variable116// CHECK-NOT:   DW_TAG117// CHECK:       DW_AT_name{{.*}}"foo"118// CHECK-NOT:   DW_TAG119// CHECK:       DW_AT_type {{.*}}{0x{{0*}}[[PTR:.*]]}120//121// CHECK: 0x{{0*}}[[PTR]]: DW_TAG_pointer_type122// CHECK-NEXT:  DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[INTERFACE]]123extern int odr_violation;124 125@import Foo;126int main(int argc, char **argv) {127  Bar bar;128  Foo *foo = 0;129  bar.value = odr_violation;130  return bar.value;131}132#endif133#endif134#endif135 136// CHECK:     DW_TAG_compile_unit137// CHECK-NOT:   DW_AT_GNU_dwo_id138// CHECK:       DW_AT_name {{.*}}"odr_violation.c"139// CHECK: DW_TAG_variable140// CHECK:   DW_AT_name {{.*}}"odr_violation"141// CHECK:   DW_AT_type [DW_FORM_ref4] ({{.*}}{0x{{0*}}[[BAR2:.*]]}142// CHECK: 0x{{0*}}[[BAR2]]: DW_TAG_typedef143// CHECK:   DW_AT_type [DW_FORM_ref4] ({{.*}}{0x{{0*}}[[BAR3:.*]]}144// CHECK:   DW_AT_name {{.*}}"Bar"145// CHECK: 0x{{0*}}[[BAR3]]: DW_TAG_structure_type146// CHECK-NEXT:   DW_AT_name {{.*}}"Bar"147