blob: 4edb887238da39196994daf1f260eeb43b522131 [file] [edit]
// RUN: %clang -cc1 -triple x86_64-unknown-unknown %s -debug-info-kind=limited -fdynamic-debugging -o %t \
// RUN: -emit-llvm --save-dynamic-debugging-temps --discard-dynamic-debugging-debug-module
// RUN: FileCheck %s --check-prefix=INNER < %t.dyndbg.1.inner.ll
// RUN: FileCheck %s --check-prefix=OUTER < %t.dyndbg.2.outer.ll
/// Test functions get expected linkage and names in the dyndbg inner
/// and outer modules. Each outer (to-be-optimized) function should have a
/// corresponding inner (unoptimized) version.
///
/// The internal functions get external aliases in outer.
// OUTER: $_Z7odrweakv = comdat any
// INNER: $__dyndbg._Z7odrweakv = comdat any
/// Outer: as input. Inner: external reference, __dyndbg copy.
void external() {}
// OUTER-DAG: define dso_local void @_Z8externalv()
// INNER-DAG: declare dso_local void @_Z8externalv()
// INNER-DAG: define dso_local void @__dyndbg._Z8externalv()
/// Outer: add external linkage alias. Inner: external reference to alias,
/// __dyndbg copy.
[[gnu::used]] static void internal() {}
// OUTER-DAG: @_ZL8internalv.dyndbg.[[hash:[0-9A-F]+]] = hidden alias void (), ptr @_ZL8internalv
// OUTER-DAG: define internal void @_ZL8internalv()
// INNER-DAG: declare hidden void @_ZL8internalv.dyndbg.[[hash:[0-9A-F]+]]()
// INNER-DAG: define hidden void @__dyndbg._ZL8internalv.dyndbg.[[hash]]
/// Outer: as input. Inner: external reference, __dyndbg copy.
[[gnu::used]] inline void odrweak() {}
// OUTER-DAG: define linkonce_odr void @_Z7odrweakv()
// INNER-DAG: declare void @_Z7odrweakv()
// INNER-DAG: define linkonce_odr void @__dyndbg._Z7odrweakv()