]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/patches/patch-r264827-clang-r202185-variadic-fn-debug-info.diff
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / patches / patch-r264827-clang-r202185-variadic-fn-debug-info.diff
1 Merge Clang r202185:
2
3   Debug info: Generate debug info for variadic functions.
4   Paired commit with LLVM.
5
6   rdar://problem/13690847
7
8 This merege includes changes to use the Clang 3.4 API (revisions
9 199686 and 200082) in lib/CodeGen/CGDebugInfo.cpp:
10
11 getParamType  -> getArgType
12 getNumParams  -> getNumArgs
13 getReturnType -> getResultType
14
15 Sponsored by:   DARPA, AFRL
16
17 Introduced here: http://svnweb.freebsd.org/changeset/base/264827
18
19 Index: tools/clang/lib/CodeGen/CGDebugInfo.cpp
20 ===================================================================
21 --- tools/clang/lib/CodeGen/CGDebugInfo.cpp     (revision 264826)
22 +++ tools/clang/lib/CodeGen/CGDebugInfo.cpp     (revision 264827)
23 @@ -37,7 +37,7 @@
24  #include "llvm/IR/Module.h"
25  #include "llvm/Support/Dwarf.h"
26  #include "llvm/Support/FileSystem.h"
27 -#include "llvm/Support/Path.h"\r
28 +#include "llvm/Support/Path.h"
29  using namespace clang;
30  using namespace clang::CodeGen;
31  
32 @@ -342,9 +342,9 @@
33    if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) {
34      MainFileDir = MainFile->getDir()->getName();
35      if (MainFileDir != ".") {
36 -      llvm::SmallString<1024> MainFileDirSS(MainFileDir);\r
37 -      llvm::sys::path::append(MainFileDirSS, MainFileName);\r
38 -      MainFileName = MainFileDirSS.str();\r
39 +      llvm::SmallString<1024> MainFileDirSS(MainFileDir);
40 +      llvm::sys::path::append(MainFileDirSS, MainFileName);
41 +      MainFileName = MainFileDirSS.str();
42      }
43    }
44  
45 @@ -760,6 +760,8 @@
46    else if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(Ty)) {
47      for (unsigned i = 0, e = FPT->getNumArgs(); i != e; ++i)
48        EltTys.push_back(getOrCreateType(FPT->getArgType(i), Unit));
49 +    if (FPT->isVariadic())
50 +      EltTys.push_back(DBuilder.createUnspecifiedParameter());
51    }
52  
53    llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(EltTys);
54 @@ -2420,6 +2422,20 @@
55      llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(Elts);
56      return DBuilder.createSubroutineType(F, EltTypeArray);
57    }
58 +
59 +  // Variadic function.
60 +  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
61 +    if (FD->isVariadic()) {
62 +      SmallVector<llvm::Value *, 16> EltTys;
63 +      EltTys.push_back(getOrCreateType(FD->getResultType(), F));
64 +      if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(FnType))
65 +        for (unsigned i = 0, e = FPT->getNumArgs(); i != e; ++i)
66 +          EltTys.push_back(getOrCreateType(FPT->getArgType(i), F));
67 +      EltTys.push_back(DBuilder.createUnspecifiedParameter());
68 +      llvm::DIArray EltTypeArray = DBuilder.getOrCreateArray(EltTys);
69 +      return DBuilder.createSubroutineType(F, EltTypeArray);
70 +    }
71 +
72    return llvm::DICompositeType(getOrCreateType(FnType, F));
73  }
74