Home | History | Annotate | Download | only in X86
      1 /* Compile with:
      2    cat >modules.modulemap <<EOF
      3      module Foo {
      4        header "Foo.h"
      5        export *
      6      }
      7      module Bar {
      8        header "Bar.h"
      9        export *
     10      }
     11 EOF
     12    clang -D BAR_H -E -o Bar.h modules.m
     13    clang -D FOO_H -E -o Foo.h modules.m
     14    clang -cc1 -emit-obj -fmodules -fmodule-map-file=modules.modulemap \
     15      -fmodule-format=obj -g -dwarf-ext-refs -fmodules-cache-path=. \
     16      -fdisable-module-hash modules.m -o 1.o
     17 */
     18 
     19 // RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/modules \
     20 // RUN:   -y %p/dummy-debug-map.map -o - \
     21 // RUN:     | llvm-dwarfdump --debug-dump=info - | FileCheck %s
     22 
     23 // RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/modules -y \
     24 // RUN:   %p/dummy-debug-map.map -o %t 2>&1 | FileCheck --check-prefix=WARN %s
     25 
     26 // WARN-NOT: warning: hash mismatch
     27 
     28 // ---------------------------------------------------------------------
     29 #ifdef BAR_H
     30 // ---------------------------------------------------------------------
     31 // CHECK:            DW_TAG_compile_unit
     32 // CHECK-NOT:        DW_TAG
     33 // CHECK:              DW_TAG_module
     34 // CHECK-NEXT:           DW_AT_name{{.*}}"Bar"
     35 // CHECK: 0x0[[BAR:.*]]: DW_TAG_structure_type
     36 // CHECK-NOT:              DW_TAG
     37 // CHECK:                  DW_AT_name {{.*}}"Bar"
     38 // CHECK-NOT:              DW_TAG
     39 // CHECK:                  DW_TAG_member
     40 // CHECK:                    DW_AT_name {{.*}}"value"
     41 // CHECK:                DW_TAG_structure_type
     42 // CHECK-NOT:              DW_TAG
     43 // CHECK:                  DW_AT_name {{.*}}"PruneMeNot"
     44 
     45 struct Bar {
     46   int value;
     47 };
     48 
     49 struct PruneMeNot;
     50 
     51 #else
     52 // ---------------------------------------------------------------------
     53 #ifdef FOO_H
     54 // ---------------------------------------------------------------------
     55 // CHECK:               DW_TAG_compile_unit
     56 // CHECK-NOT:             DW_TAG
     57 // CHECK: 0x0[[FOO:.*]]:  DW_TAG_module
     58 // CHECK-NEXT:              DW_AT_name{{.*}}"Foo"
     59 // CHECK-NOT:               DW_TAG
     60 // CHECK:                   DW_TAG_typedef
     61 // CHECK-NOT:                 DW_TAG
     62 // CHECK:                     DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[BAR]])
     63 // CHECK:                   DW_TAG_structure_type
     64 // CHECK-NEXT:                DW_AT_name{{.*}}"S"
     65 // CHECK-NOT:                 DW_TAG
     66 // CHECK: 0x0[[INTERFACE:.*]]: DW_TAG_structure_type
     67 // CHECK-NEXT:                DW_AT_name{{.*}}"Foo"
     68 
     69 @import Bar;
     70 typedef struct Bar Bar;
     71 struct S {};
     72 
     73 @interface Foo {
     74   int ivar;
     75 }
     76 @end
     77 
     78 // ---------------------------------------------------------------------
     79 #else
     80 // ---------------------------------------------------------------------
     81 
     82 // CHECK:  DW_TAG_compile_unit
     83 // CHECK:    DW_AT_low_pc
     84 // CHECK-NOT:DW_TAG
     85 // CHECK:     DW_TAG_module
     86 // CHECK-NEXT:  DW_AT_name{{.*}}"Foo"
     87 // CHECK-NOT:   DW_TAG
     88 // CHECK:       DW_TAG_typedef
     89 // CHECK-NOT:     DW_TAG
     90 // CHECK:       NULL
     91 //
     92 // CHECK:   DW_TAG_imported_declaration
     93 // CHECK-NOT: DW_TAG
     94 // CHECK:     DW_AT_import [DW_FORM_ref_addr] (0x{{0*}}[[FOO]]
     95 //
     96 // CHECK:   DW_TAG_subprogram
     97 // CHECK:     DW_AT_name {{.*}}"main"
     98 //
     99 // CHECK:     DW_TAG_variable
    100 // CHECK:     DW_TAG_variable
    101 // CHECK-NOT:   DW_TAG
    102 // CHECK:       DW_AT_name{{.*}}"foo"
    103 // CHECK-NOT:   DW_TAG
    104 // CHECK:       DW_AT_type {{.*}}{0x{{0*}}[[PTR:.*]]}
    105 //
    106 // CHECK: 0x{{0*}}[[PTR]]: DW_TAG_pointer_type
    107 // CHECK-NEXT   DW_AT_type [DW_FORM_ref_addr] {0x{{0*}}[[INTERFACE]])
    108 
    109 @import Foo;
    110 int main(int argc, char **argv) {
    111   Bar bar;
    112   Foo *foo = 0;
    113   bar.value = 42;
    114   return bar.value;
    115 }
    116 #endif
    117 #endif
    118