DebugInfo: Simplify/tidy/correct global variable decl/def emission handling.
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 23 Oct 2014 19:12:43 +0000 (19:12 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 23 Oct 2014 19:12:43 +0000 (19:12 +0000)
commit49cfc8ca8e219bb53a1d261ea23eecc87bf072ab
treeb9d5ac55a022799be716bbbbf3fd7d31938f30ab
parent4c8cb14c1ab0abe44bef7b19e53671d28685372b
DebugInfo: Simplify/tidy/correct global variable decl/def emission handling.

This fixes a bug (introduced by fixing the IR emitted from Clang where
the definition of a static member would be scoped within the class,
rather than within its lexical decl context) where the definition of a
static variable would be placed inside a class.

It also improves source fidelity by scoping static class member
definitions inside the lexical decl context in which tehy are written
(eg: namespace n { class foo { static int i; } int foo::i; } - the
definition of 'i' will be within the namespace 'n' in the DWARF output
now).

Lastly, and the original goal, this reduces debug info size slightly
(and makes debug info easier to read, etc) by placing the definitions of
non-member global variables within their namespace, rather than using a
separate namespace-scoped declaration along with a definition at global
scope.

Based on patches and discussion with Frédéric.

llvm-svn: 220497
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/test/DebugInfo/X86/debug-info-static-member.ll
llvm/test/DebugInfo/X86/gnu-public-names.ll