summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-06-04 04:40:03 +0000
committerBill Wendling <isanbard@gmail.com>2013-06-04 04:40:03 +0000
commit156dd00656513fb832983f6b3a6e54f5c9b6f0f3 (patch)
tree905dd196a7d63961219624ef657696c8fc5baf47
parentc89859f46c385b908f9adfad934862e52a7bb805 (diff)
downloadllvmorg-3.3.0-rc3.tar.gz
Merging r183153:llvmorg-3.3.0-rc3
------------------------------------------------------------------------ r183153 | dmalea | 2013-06-03 13:45:54 -0700 (Mon, 03 Jun 2013) | 7 lines Fix crash (in optimized builds) due to invalid metadata operand - ConstantDataArray is not a valid MDNode operand - encode function-name strings in metadata by wrapping in an MDString instead - should resolve reported by http://llvm-jenkins.debian.net/job/llvm-toolchain-quantal-binaries/architecture=amd64,distribution=quantal/173/ ------------------------------------------------------------------------ llvm-svn: 183191
-rw-r--r--lldb/source/Expression/IRDynamicChecks.cpp15
-rw-r--r--lldb/source/Expression/IRForTarget.cpp10
2 files changed, 8 insertions, 17 deletions
diff --git a/lldb/source/Expression/IRDynamicChecks.cpp b/lldb/source/Expression/IRDynamicChecks.cpp
index c2515c9730ca..4030f149ab2d 100644
--- a/lldb/source/Expression/IRDynamicChecks.cpp
+++ b/lldb/source/Expression/IRDynamicChecks.cpp
@@ -517,23 +517,16 @@ private:
return false;
}
- ConstantDataArray *real_name = dyn_cast<ConstantDataArray>(metadata->getOperand(0));
+ MDString *real_name = dyn_cast<MDString>(metadata->getOperand(0));
if (!real_name)
{
if (log)
- log->Printf("Function call metadata is not a ConstantArray for [%p] %s", call_inst, PrintValue(call_inst).c_str());
+ log->Printf("Function call metadata is not an MDString for [%p] %s", call_inst, PrintValue(call_inst).c_str());
return false;
}
-
- if (!real_name->isString())
- {
- if (log)
- log->Printf("Function call metadata is not a string for [%p] %s", call_inst, PrintValue(call_inst).c_str());
- return false;
- }
-
- std::string name_str = real_name->getAsString();
+
+ std::string name_str = real_name->getString();
const char* name_cstr = name_str.c_str();
if (log)
diff --git a/lldb/source/Expression/IRForTarget.cpp b/lldb/source/Expression/IRForTarget.cpp
index 778c6c0b1837..65ff324b843a 100644
--- a/lldb/source/Expression/IRForTarget.cpp
+++ b/lldb/source/Expression/IRForTarget.cpp
@@ -337,12 +337,10 @@ IRForTarget::RegisterFunctionMetadata(LLVMContext &context,
if (Instruction *user_inst = dyn_cast<Instruction>(user))
{
- Constant *name_array = ConstantDataArray::getString(context, StringRef(name));
-
- ArrayRef<Value *> md_values(name_array);
-
- MDNode *metadata = MDNode::get(context, md_values);
-
+ MDString* md_name = MDString::get(context, StringRef(name));
+
+ MDNode *metadata = MDNode::get(context, md_name);
+
user_inst->setMetadata("lldb.call.realName", metadata);
}
else