1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/test/DebugInfo/COFF
Zachary Turner 5d9ac00b6e [CodeView] Don't output S_UDTs for nested typedefs.
S_UDT records are basically the "bridge" between the debugger's
expression evaluator and the type information. If you type
(Foo*)nullptr into the watch window, the debugger looks for an
S_UDT record named Foo. If it can find one, it displays your type.
Otherwise you get an error.

We have always understood this to mean that if you have code like
this:

  struct A {
    int X;
  };

  struct B {
    typedef A AT;
    AT Member;
  };

that you will get 3 S_UDT records. "A", "B", and "B::AT". Because
if you were to type (B::AT*)nullptr into the debugger, it would
need to find an S_UDT record named "B::AT".

But "B::AT" is actually the S_UDT record that would be generated
if B were a namespace, not a struct. So the debugger needs to be
able to distinguish this case. So what it does is:

  1. Look for an S_UDT named "B::AT". If it finds one, it knows
     that AT is in a namespace.
  2. If it doesn't find one, split at the scope resolution operator,
     and look for an S_UDT named B. If it finds one, look up the type
     for B, and then look for AT as one of its members.

With this algorithm, S_UDT records for nested typedefs are not just
unnecessary, but actually wrong!

The results of implementing this in clang are dramatic. It cuts
our /DEBUG:FASTLINK PDB sizes by more than 50%, and we go from
being ~20% larger than MSVC PDBs on average, to ~40% smaller.

It also slightly speeds up link time. We get about 10% faster
links than without this patch.

Differential Revision: https://reviews.llvm.org/D37410

llvm-svn: 312583
2017-09-05 22:06:39 +00:00
..
anonymous-struct.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
array-odr-violation.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
asan-module-ctor.ll
asan-module-without-functions.ll
asm.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
big-type.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
bitfields.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
comdat.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
cpp-mangling.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
defer-complete-type.ll
dlang.ll Followup to r308890: don't assert the llvm llvm version number. 2017-07-24 19:44:43 +00:00
enum.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
fp-stack.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
global-dllimport.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
globals-discarded.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
globals.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
inheritance.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
inlining-files.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
inlining-header.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
inlining-levels.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
inlining-padding.ll
inlining-same-name.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
inlining.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
int8-char-type.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
lines-bb-start.ll [codeview] Ignore DBG_VALUEs when choosing a BB start source loc 2017-07-31 21:03:08 +00:00
lit.local.cfg
local-constant.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
local-variable-gap.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
local-variables.ll [DebugInfo] Don't turn dbg.declare into DBG_VALUE for static allocas 2017-08-01 19:45:09 +00:00
long-name.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
long-type-name.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
multifile.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
multifunction.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
nested-types.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
no-cus.ll [codeview] Fix assertion failure introduced in r295354 refactoring 2017-05-12 17:02:40 +00:00
parameter-order.ll
pieces.ll Reland r311957 [codeview] support more DW_OPs for more complete debug info 2017-08-29 20:59:25 +00:00
pr28747.ll
purge-typedef-udts.ll [CodeView] Don't output S_UDT symbols for forward decls. 2017-08-28 18:49:04 +00:00
register-variables.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
retained-types.ll
scopes.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
simple.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
synthetic.ll DebugInfo: elide type index entries for synthetic types 2017-05-03 21:39:01 +00:00
tail-call-without-lexical-scopes.ll
typedef.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
types-array-advanced.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
types-array.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
types-basic.ll [codeview] Change readobj symbol dumping format 2017-07-11 23:41:41 +00:00
types-calling-conv.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
types-data-members.ll
types-nested-class.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
types-non-virtual-methods.ll
types-ptr-to-member.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
types-recursive-struct.ll
udts.ll [CodeView] Don't output S_UDTs for nested typedefs. 2017-09-05 22:06:39 +00:00
vftables.ll
virtual-method-kinds.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
virtual-methods.ll
vtable-optzn-array.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00