================
@@ -0,0 +1,72 @@
+// RUN: %clang -cc1 -triple %itanium_abi_triple %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 global variables get expected linkage and names in the dyndbg inner
+// and outer modules. Global data is stored in the outer module and referenced
+// from the inner module.
+//
+// The external global variables are simply referenced by inner.
+//
+// The internal (static) global variables get external aliases in outer
+// and those are referenced from inner.
+//
+// The internal functions _ZTW1d (thread-local wrapper routine for d) and
+// _GLOBAL__sub_I_symbols_globals, __cxx_global_var_init are promoted too (get
+// global aliases).
+
+int a = 1;
+// OUTER-DAG: @a = global i32 1, align 4
+// INNER-DAG: @a = external global i32, align 4
+
+extern int b;
+// OUTER-DAG: @b = external global i32, align 4
+// INNER-DAG: @b = external global i32, align 4
+
+inline int c = 2;
+// OUTER-DAG: $c = comdat any
+// OUTER-DAG: @c = linkonce_odr global i32 2, comdat, align 4
+// INNER-DAG: @c = external global i32, align 4
+
+thread_local int d = 3;
+// OUTER-DAG: @d = thread_local global i32 3, align 4
+// INNER-DAG: @d = external thread_local global i32, align 4
+//
+// OUTER-DAG: $_ZTW1d = comdat any
+// OUTER-DAG: define weak_odr hidden noundef ptr @_ZTW1d() #[[#]] comdat
+// INNER-DAG: $__dyndbg._ZTW1d = comdat any
+// INNER-DAG: declare hidden noundef ptr @_ZTW1d()
+// INNER-DAG: define weak_odr hidden noundef ptr @__dyndbg._ZTW1d() #[[#]] 
comdat
+
+struct S { int a, b; float c, d; } e {0, 100, 4.f, 5.f};
+// OUTER-DAG: @e = global %struct.S { i32 0, i32 100, float 4.000000e+00, 
float 5.000000e+00 }, align 4
+// INNER-DAG: @e = external global %struct.S, align 4
+
+inline S f {0, 100, 4.f, 5.f};
+// OUTER-DAG: $f = comdat any
+// OUTER-DAG: @f = linkonce_odr global %struct.S { i32 0, i32 100, float 
4.000000e+00, float 5.000000e+00 }, comdat, align 4
+// INNER-DAG: @f = external global %struct.S, align 4
+
+int fun() {
+    static int g = 0;
+    return g;
+}
+// OUTER-DAG: @_ZZ3funvE1g = internal global i32 0, align 4
+// OUTER-DAG: @_ZZ3funvE1g.dyndbg.[[hash:[0-9A-Z]+]] = hidden alias i32, ptr 
@_ZZ3funvE1g
+// INNER-DAG: @_ZZ3funvE1g.dyndbg.[[hash:[0-9A-Z]+]] = external hidden global 
i32, align 4
----------------
SLTozer wrote:

```suggestion
// OUTER-DAG: @_ZZ3funvE1g.dyndbg.[[hash:[0-9A-F]+]] = hidden alias i32, ptr 
@_ZZ3funvE1g
// INNER-DAG: @_ZZ3funvE1g.dyndbg.[[hash:[0-9A-F]+]] = external hidden global 
i32, align 4
```

https://github.com/llvm/llvm-project/pull/194860
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to