Index: lib/Transforms/IPO/GlobalOpt.cpp =================================================================== --- lib/Transforms/IPO/GlobalOpt.cpp +++ lib/Transforms/IPO/GlobalOpt.cpp @@ -1570,6 +1570,12 @@ GV->getThreadLocalMode(), GV->getType()->getAddressSpace()); NewGV->copyAttributesFrom(GV); + + SmallVector GVs; + GV->getDebugInfo(GVs); + for(auto *GV : GVs) + NewGV->addDebugInfo(GV); + GV->getParent()->getGlobalList().insert(GV->getIterator(), NewGV); Constant *InitVal = GV->getInitializer(); Index: test/Transforms/GlobalOpt/static-global-boolean-dwarf.c =================================================================== --- /dev/null +++ test/Transforms/GlobalOpt/static-global-boolean-dwarf.c @@ -0,0 +1,37 @@ +// RUN: clang -g -O2 -c %s -o %t +// RUN: llvm-dwarfdump %t | FileCheck %s + + +enum myboolean {TRUE,FALSE}; +typedef enum myboolean boolean; + + +static boolean foo; + +boolean get_foo(void){ return (foo);} + +void +init_boolean(int arg){ + if(arg == 1){ + foo = FALSE; + arg++; + } else { + foo = TRUE; + arg--; + } +} + + +int main(int argc, char *argv[]) +{ + init_boolean(argc == 2); + return 0; +} + + + +// CHECK: DW_AT_name [DW_FORM_strp] {{.*}} "foo" +// CHECK-NEXT: DW_AT_type +// CHECK-NEXT: DW_AT_decl_file +// CHECK-NEXT: DW_AT_decl_line +// CHECK-NEXT: DW_AT_location