summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff')
-rw-r--r--contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff74
1 files changed, 74 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff b/contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff
new file mode 100644
index 0000000..7084f7b
--- /dev/null
+++ b/contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff
@@ -0,0 +1,74 @@
+Merge Clang r202185:
+
+ Debug info: Generate debug info for variadic functions.
+ Paired commit with LLVM.
+
+ rdar://problem/13690847
+
+This merege includes changes to use the Clang 3.4 API (revisions
+199686 and 200082) in lib/CodeGen/CGDebugInfo.cpp:
+
+getParamType -> getArgType
+getNumParams -> getNumArgs
+getReturnType -> getResultType
+
+Sponsored by: DARPA, AFRL
+
+http://svnweb.freebsd.org/changeset/base/264827
+
+Index: tools/clang/lib/CodeGen/CGDebugInfo.cpp
+===================================================================
+--- tools/clang/lib/CodeGen/CGDebugInfo.cpp (revision 264826)
++++ tools/clang/lib/CodeGen/CGDebugInfo.cpp (revision 264827)
+@@ -37,7 +37,7 @@
+ #include "llvm/IR/Module.h"
+ #include "llvm/Support/Dwarf.h"
+ #include "llvm/Support/FileSystem.h"
+-#include "llvm/Support/Path.h"
++#include "llvm/Support/Path.h"
+ using namespace clang;
+ using namespace clang::CodeGen;
+
+@@ -342,9 +342,9 @@
+ if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) {
+ MainFileDir = MainFile->getDir()->getName();
+ if (MainFileDir != ".") {
+- llvm::SmallString<1024> MainFileDirSS(MainFileDir);
+- llvm::sys::path::append(MainFileDirSS, MainFileName);
+- MainFileName = MainFileDirSS.str();
++ llvm::SmallString<1024> MainFileDirSS(MainFileDir);
++ llvm::sys::path::append(MainFileDirSS, MainFileName);
++ MainFileName = MainFileDirSS.str();
+ }
+ }
+
+@@ -760,6 +760,8 @@
+ else if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(Ty)) {
+ for (unsigned i = 0, e = FPT->getNumArgs(); i != e; ++i)
+ EltTys.push_back(getOrCreateType(FPT->getArgType(i), Unit));
++ if (FPT->isVariadic())
++ EltTys.push_back(DBuilder.createUnspecifiedParameter());
+ }
+
+ llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(EltTys);
+@@ -2420,6 +2422,20 @@
+ llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(Elts);
+ return DBuilder.createSubroutineType(F, EltTypeArray);
+ }
++
++ // Variadic function.
++ if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
++ if (FD->isVariadic()) {
++ SmallVector<llvm::Value *, 16> EltTys;
++ EltTys.push_back(getOrCreateType(FD->getResultType(), F));
++ if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(FnType))
++ for (unsigned i = 0, e = FPT->getNumArgs(); i != e; ++i)
++ EltTys.push_back(getOrCreateType(FPT->getArgType(i), F));
++ EltTys.push_back(DBuilder.createUnspecifiedParameter());
++ llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(EltTys);
++ return DBuilder.createSubroutineType(F, EltTypeArray);
++ }
++
+ return llvm::DICompositeType(getOrCreateType(FnType, F));
+ }
+
OpenPOWER on IntegriCloud