[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