| // 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() |