<div dir="ltr">Would it be reasonable/useful to add another level of indirection while we're here - that would describe which part of the variable is being described by this location:<br><br>DIGlobalVariableExpr(value: DW_OP_const 42) -> DIGlobalVariableFragment(offset: 32 bits) -> DIGlobalVariable(name: foo)<br><br>(just guessing/pretending there's a DW_OP_const for constant values - I forget how it all works, but purely for demonstration purposes)<br><br>That way code manipulating DIGlobalVariableExprs wouldn't need to have explicit knowledge of which part of the variable is being described here. (I suppose that could end up with us creating a bottom-up expression tree in metadata, which probably isn't ideal (too heavyweight))<br><br>Perhaps keeping the bit_piece parts out of the DWARF expression bytes and in a separate field of the DIGlobalVariableExpr?<br><br>DIGlobalVariableExpr(offset: 32, value: DW_OP_const 42)<br><br>Then at least when a variable moves around (does that happen? maybe? - I suppose something like asan, smooshing everything into a single alloca would move something around without splitting it up) the expression can be updated relatively simply without unpacking through a DW_OP_bit_piece, etc?<br><br>Maybe this doesn't matter - Ih aven't looked at much of the expression/location handling code.</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Nov 18, 2016 at 9:32 AM Adrian Prantl <<a href="mailto:aprantl@apple.com">aprantl@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">aprantl removed rL LLVM as the repository for this revision.<br class="gmail_msg">
aprantl updated this revision to Diff 78544.<br class="gmail_msg">
aprantl added a comment.<br class="gmail_msg">
<br class="gmail_msg">
Improved type-safety by adding a DIGlobalVarExpr pointer union.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D26769" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D26769</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  include/llvm/Bitcode/LLVMBitCodes.h<br class="gmail_msg">
  include/llvm/IR/DIBuilder.h<br class="gmail_msg">
  include/llvm/IR/DebugInfo.h<br class="gmail_msg">
  include/llvm/IR/DebugInfoMetadata.h<br class="gmail_msg">
  include/llvm/IR/GlobalVariable.h<br class="gmail_msg">
  include/llvm/IR/Metadata.def<br class="gmail_msg">
  lib/Analysis/ModuleDebugInfoPrinter.cpp<br class="gmail_msg">
  lib/AsmParser/LLParser.cpp<br class="gmail_msg">
  lib/Bitcode/Reader/BitcodeReader.cpp<br class="gmail_msg">
  lib/Bitcode/Writer/BitcodeWriter.cpp<br class="gmail_msg">
  lib/CodeGen/AsmPrinter/CodeViewDebug.cpp<br class="gmail_msg">
  lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br class="gmail_msg">
  lib/CodeGen/AsmPrinter/DwarfCompileUnit.h<br class="gmail_msg">
  lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br class="gmail_msg">
  lib/IR/AsmWriter.cpp<br class="gmail_msg">
  lib/IR/DIBuilder.cpp<br class="gmail_msg">
  lib/IR/DebugInfo.cpp<br class="gmail_msg">
  lib/IR/DebugInfoMetadata.cpp<br class="gmail_msg">
  lib/IR/LLVMContextImpl.h<br class="gmail_msg">
  lib/IR/Metadata.cpp<br class="gmail_msg">
  lib/IR/Verifier.cpp<br class="gmail_msg">
  lib/Transforms/IPO/StripSymbols.cpp<br class="gmail_msg">
  lib/Transforms/Instrumentation/AddressSanitizer.cpp<br class="gmail_msg">
  test/Assembler/diglobalvariable.ll<br class="gmail_msg">
  test/Assembler/diglobalvariableexpression.ll<br class="gmail_msg">
  test/Bitcode/DIGlobalVariableExpr.ll<br class="gmail_msg">
  test/Bitcode/DIGlobalVariableExpr.ll.bc<br class="gmail_msg">
  test/Bitcode/diglobalvariable-3.8.ll<br class="gmail_msg">
  test/Bitcode/diglobalvariable-3.8.ll.bc<br class="gmail_msg">
  test/DebugInfo/X86/multiple-at-const-val.ll<br class="gmail_msg">
  test/DebugInfo/X86/pr12831.ll<br class="gmail_msg">
  test/DebugInfo/X86/split-global.ll<br class="gmail_msg">
  test/DebugInfo/X86/stack-value-dwarf4.ll<br class="gmail_msg">
  test/DebugInfo/X86/unattached-global.ll<br class="gmail_msg">
  test/Transforms/GlobalMerge/debug-info.ll<br class="gmail_msg">
  unittests/IR/MetadataTest.cpp<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>