Debug info for byval parameter. First attempt, unclear if it is right. But at least it tells gdb there is a parameter.
llvm-svn: 46469
diff --git a/llvm-gcc-4.2/gcc/llvm-convert.cpp b/llvm-gcc-4.2/gcc/llvm-convert.cpp
index 58c5183..4e1a380 100644
--- a/llvm-gcc-4.2/gcc/llvm-convert.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-convert.cpp
@@ -672,13 +672,22 @@
if (DECL_NAME(Args)) Name = IDENTIFIER_POINTER(DECL_NAME(Args));
const Type *ArgTy = ConvertType(TREE_TYPE(Args));
- if (isPassedByInvisibleReference(TREE_TYPE(Args)) ||
+ bool isInvRef = isPassedByInvisibleReference(TREE_TYPE(Args));
+ if (isInvRef ||
(!ArgTy->isFirstClassType() &&
LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR(TREE_TYPE(Args), ArgTy))) {
// If the value is passed by 'invisible reference' or 'byval reference',
// the l-value for the argument IS the argument itself.
- SET_DECL_LLVM(Args, AI);
AI->setName(Name);
+ SET_DECL_LLVM(Args, AI);
+ if (!isInvRef && TheDebugInfo) {
+ Value *Tmp = CreateTemporary(PointerType::getUnqual(ArgTy));
+ Tmp->setName(std::string(Name)+"_addr");
+ TheDebugInfo->EmitDeclare(Args, llvm::dwarf::DW_TAG_arg_variable,
+ Name, TREE_TYPE(Args), Tmp,
+ Builder.GetInsertBlock());
+ Builder.CreateStore(AI, Tmp);
+ }
++AI;
} else {
// Otherwise, we create an alloca to hold the argument value and provide