xref: /llvm-project/llvm/test/tools/dsymutil/X86/linker-llvm-union-fwd-decl.test (revision f1fdfe6888f93b9f6dfb4689e1f3206de584ff5b)
1Test binaries created with the following commands:
2
3$ cat container.cpp
4#include "container.h"
5#include <stdlib.h>
6
7struct Container_ivars {
8  // real definition here
9};
10
11ContainerPtr allocateContainer() {
12  Container *c = (Container *)malloc(sizeof(Container));
13  c->ivars = (Container_ivars *)malloc(sizeof(Container_ivars));
14  return c;
15}
16
17extern void doSomething(ContainerPtr);
18
19int main() {
20  ContainerPtr c = allocateContainer();
21  doSomething(c);
22  return 0;
23}
24
25$ cat container.h
26struct Container_ivars;
27
28struct Container {
29  union {
30    struct Container_ivars *ivars;
31  };
32};
33
34typedef Container *ContainerPtr;
35
36$ cat use.cpp
37#include "container.h"
38
39void doSomething(ContainerPtr c) {}
40
41
42$ clang++ -O0 -g container.cpp -c -o container.o
43$ clang++ -O0 -g use.cpp -c -o use.o
44$ clang++ use.o container.o -o a.out
45
46Note that the link order in the last command matters for this test.
47
48RUN: dsymutil --linker parallel -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/union/a.out -o %t.dSYM
49RUN: llvm-dwarfdump --debug-info %t.dSYM | FileCheck %s
50
51CHECK:       DW_TAG_compile_unit
52CHECK-NEXT:    DW_AT_producer    ("llvm DWARFLinkerParallel library
53CHECK-NEXT:    DW_AT_language    (DW_LANG_C_plus_plus_14)
54CHECK-NEXT:    DW_AT_name        ("__artificial_type_unit")
55CHECK-NEXT:    DW_AT_stmt_list   (0x00000000)
56
57CHECK:       DW_TAG_structure_type
58CHECK:         DW_AT_calling_convention        (DW_CC_pass_by_value)
59CHECK:         DW_AT_name      ("Container_ivars")
60CHECK-NEXT:    DW_AT_byte_size (0x01)
61CHECK-NEXT:    DW_AT_decl_line (4)
62CHECK-NEXT:    DW_AT_decl_file ("{{.*}}container.cpp")
63
64CHECK:       DW_TAG_compile_unit
65CHECK-NOT:   DW_AT_declaration
66