
This makes it easier to see where a global ctor comes from, and it also makes ASan's init order analyzer output easier to understand. gcc does this too, but only in -fPIC mode for some reason. Don't do this for constructors with explicit init priority. Also prepend "sub_" before the 'I', that way regular constructors stay lexicographically after symbols with init priority (because ord('s') > ord('I')). gold seems to ignore the name of constructor symbols, and ld only looks at the symbol if it includes an init priority, which this patch doesn't change. Before: __GLOBAL_I_a Now: __GLOBAL_sub_I_myfile.cc llvm-svn: 208128
17 lines
457 B
C++
17 lines
457 B
C++
// RUN: %clang_cc1 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s
|
|
// PR5967
|
|
|
|
extern void* foo;
|
|
static void* const a = foo;
|
|
void* bar() { return a; }
|
|
|
|
// CHECK: @_ZL1a = internal global i8* null
|
|
|
|
// CHECK-LABEL: define internal void @__cxx_global_var_init
|
|
// CHECK: load i8** @foo
|
|
// CHECK: ret void
|
|
|
|
// CHECK-LABEL: define internal void @_GLOBAL__sub_I_deferred_global_init.cpp
|
|
// CHECK: call void @__cxx_global_var_init()
|
|
// CHECK: ret void
|