summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-05-20 21:40:13 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-05-20 21:40:13 +0000
commite94103adcde704725ccfcd1481035bbc301f755a (patch)
tree94e0270fbd11491b9778a037635931b4850c7604
parent6a9366c0c633c4518d55685d4f3b289ef99c0bd1 (diff)
downloadllvm-e94103adcde704725ccfcd1481035bbc301f755a.tar.gz
llvm-e94103adcde704725ccfcd1481035bbc301f755a.tar.bz2
llvm-e94103adcde704725ccfcd1481035bbc301f755a.tar.xz
Unbreak the sanitizer buildbots after r209226 due to SROA issue described in http://reviews.llvm.org/D3714
Undecided whether this should include a test case - SROA produces bad dbg.value metadata describing a value for a reference that is actually the value of the thing the reference refers to. For now, loosening the assert lets this not assert, but it's still bogus/wrong output... If someone wants to tell me to add a test, I'm willing/able, just undecided. Hopefully we'll get SROA fixed soon & we can tighten up this assertion again. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209240 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index 68673f7fb8..f09cb6ade6 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -751,11 +751,14 @@ static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
if (DTy.isDerivedType()) {
dwarf::Tag T = (dwarf::Tag)Ty.getTag();
// Encode pointer constants as unsigned bytes. This is used at least for
- // null pointer constant emission. Maybe DW_TAG_reference_type should be
- // accepted here too, if there are ways to produce compile-time constant
- // references.
+ // null pointer constant emission.
+ // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed
+ // here, but accept them for now due to a bug in SROA producing bogus
+ // dbg.values.
if (T == dwarf::DW_TAG_pointer_type ||
- T == dwarf::DW_TAG_ptr_to_member_type)
+ T == dwarf::DW_TAG_ptr_to_member_type ||
+ T == dwarf::DW_TAG_reference_type ||
+ T == dwarf::DW_TAG_rvalue_reference_type)
return true;
assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type ||
T == dwarf::DW_TAG_volatile_type ||