[llvm-commits] [llvm-gcc-4.2] r62709 - /llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
Devang Patel
dpatel at apple.com
Wed Jan 21 11:40:28 PST 2009
Author: dpatel
Date: Wed Jan 21 13:40:27 2009
New Revision: 62709
URL: http://llvm.org/viewvc/llvm-project?rev=62709&view=rev
Log:
Fix subprogram debug info.
Encode argument types properly.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp?rev=62709&r1=62708&r2=62709&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Wed Jan 21 13:40:27 2009
@@ -217,12 +217,34 @@
std::string Filename, Directory;
DirectoryAndFile(Loc.file, Directory, Filename);
const char *LinkageName = getLinkageName(FnDecl);
- DIType FnTy = getOrCreateType(TREE_TYPE(TREE_TYPE(FnDecl)));
+
+ tree func_type = TREE_TYPE(FnDecl);
+ llvm::SmallVector<llvm::DIDescriptor, 16> ArgTys;
+ // Add the result type at least.
+ ArgTys.push_back(getOrCreateType(TREE_TYPE(func_type)));
+
+ // Set up remainder of arguments.
+ for (tree arg = TYPE_ARG_TYPES(func_type); arg; arg = TREE_CHAIN(arg)) {
+ tree formal_type = TREE_VALUE(arg);
+ if (formal_type == void_type_node) break;
+ ArgTys.push_back(getOrCreateType(formal_type));
+ }
+
+ llvm::DIArray FnTypeArray =
+ DebugFactory.GetOrCreateArray(&ArgTys[0], ArgTys.size());
+
+ llvm::DICompositeType FnTy =
+ DebugFactory.CreateCompositeType(llvm::dwarf::DW_TAG_subroutine_type,
+ MainCompileUnit, "",
+ MainCompileUnit, 0, 0, 0, 0, 0,
+ llvm::DIType(), FnTypeArray);
+
DISubprogram SP = DebugFactory.CreateSubprogram(MainCompileUnit,
Fn->getNameStr(),
Fn->getNameStr(), LinkageName,
MainCompileUnit, CurLineNo,
- FnTy, Fn->hasInternalLinkage(),
+ FnTy,
+ Fn->hasInternalLinkage(),
true /*definition*/,
&Filename, &Directory);
More information about the llvm-commits
mailing list