2 REQUIRES: x86-registered-target
4 RUN: %clang_cc1 -triple=x86_64-linux-gnu -fmodules-codegen -fmodules-debuginfo -x c++ -fmodules -emit-module -fmodule-name=foo %S/Inputs/codegen/foo.modulemap -o %t/foo.pcm
6 RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -debug-info-kind=limited -o - %t/foo.pcm | FileCheck --check-prefix=FOO --check-prefix=BOTH %s
7 RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -debug-info-kind=limited -o - -fmodules -disable-llvm-passes -fmodule-file=%t/foo.pcm %S/Inputs/codegen/use.cpp | FileCheck --check-prefix=BOTH --check-prefix=USE %s
10 For want of any better definition, inline asm goes "everywhere" the same as it
11 if it were in a header (with the disadvantage that the inline asm will be
12 included in the program if the module is used, even if the header containing
13 the inline asm is never included - unlike a non-modular build).
15 This is inconsistent with how namespace scope static variables are handled -
16 where they only appear in the code that includes a header. This functionality
17 was implemented to workaround/support the initialization of iostreams
18 (implemented as a namespace scope static in the header - only to be provided
19 when that specific header is included in the program).
21 BOTH: module asm "narf"
23 FOO: $_Z2f1PKcz = comdat any
24 FOO: $_ZN13implicit_dtorD1Ev = comdat any
25 USE: $_Z4instIiEvv = comdat any
26 USE: $_Z10always_inlv = comdat any
27 FOO: $_ZN13implicit_dtorD2Ev = comdat any
28 FOO: define weak_odr void @_Z2f1PKcz(i8* noundef %fmt, ...) #{{[0-9]+}} comdat
29 FOO: call void @llvm.va_start(i8* %{{[a-zA-Z0-9]*}})
31 Test that implicit special members are emitted into the FOO module if they're
32 ODR used there, otherwise emit them linkonce_odr as usual in the use.
34 FIXME: Proactively instantiate any valid implicit special members to emit them into the module object.
36 FOO: define weak_odr void @_ZN13implicit_dtorD1Ev
37 FOO: define weak_odr void @_Z4instIfEvv
38 FOO: define weak_odr void @_ZN13implicit_dtorD2Ev
40 USE: define linkonce_odr void @_ZN20uninst_implicit_dtorD1Ev
41 USE: define linkonce_odr void @_Z4instIiEvv
42 USE: define linkonce_odr void @_Z10always_inlv
43 USE: define linkonce_odr void @_ZN20uninst_implicit_dtorD2Ev
45 Modular debug info puts the definition of a class defined in a module in that
46 module's object. Users of the module only get a declaration.
48 'distinct' is used for definition records (the flags field is empty/unspecified)
49 FOO: = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "implicit_dtor"
50 Declarations are non-distinct and include the 'DIFlagFwdDecl' flag.
51 USE: = !DICompositeType(tag: DW_TAG_structure_type, name: "implicit_dtor", {{.*}}, flags: DIFlagFwdDecl