diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-07-13 19:25:38 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-07-13 19:25:38 +0000 | 
| commit | 8746d127c04f5bbaf6c6e88cef8606ca5a6a54e9 (patch) | |
| tree | 84c9d77f8c764f04bcef0b1da4eedfa233d67a46 /tools | |
| parent | cf1b401909b5e54edfd80656b1a18eaa31f9f6f1 (diff) | |
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/c-index-test/c-index-test.c | 2 | ||||
| -rw-r--r-- | tools/clang-import-test/clang-import-test.cpp | 18 | ||||
| -rw-r--r-- | tools/diagtool/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | tools/diagtool/FindDiagnosticID.cpp | 58 | ||||
| -rw-r--r-- | tools/libclang/CIndex.cpp | 11 | ||||
| -rw-r--r-- | tools/libclang/CXIndexDataConsumer.cpp | 4 | ||||
| -rw-r--r-- | tools/libclang/libclang.exports | 1 | 
7 files changed, 78 insertions, 17 deletions
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index 1e925569dd95..cf3581e259f7 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -804,6 +804,8 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) {        printf(" (const)");      if (clang_CXXMethod_isPureVirtual(Cursor))        printf(" (pure)"); +    if (clang_EnumDecl_isScoped(Cursor)) +      printf(" (scoped)");      if (clang_Cursor_isVariadic(Cursor))        printf(" (variadic)");      if (clang_Cursor_isObjCOptional(Cursor)) diff --git a/tools/clang-import-test/clang-import-test.cpp b/tools/clang-import-test/clang-import-test.cpp index db4dc76eded5..6b724e9cf5fa 100644 --- a/tools/clang-import-test/clang-import-test.cpp +++ b/tools/clang-import-test/clang-import-test.cpp @@ -182,14 +182,6 @@ BuildCompilerInstance(ArrayRef<const char *> ClangArgv) {    return Ins;  } -std::unique_ptr<CompilerInstance> -BuildCompilerInstance(ArrayRef<std::string> ClangArgs) { -  std::vector<const char *> ClangArgv(ClangArgs.size()); -  std::transform(ClangArgs.begin(), ClangArgs.end(), ClangArgv.begin(), -                 [](const std::string &s) -> const char * { return s.data(); }); -  return init_convenience::BuildCompilerInstance(ClangArgv); -} -  std::unique_ptr<ASTContext>  BuildASTContext(CompilerInstance &CI, SelectorTable &ST, Builtin::Context &BC) {    auto AST = llvm::make_unique<ASTContext>( @@ -313,14 +305,8 @@ int main(int argc, const char **argv) {    std::vector<std::unique_ptr<CompilerInstance>> IndirectCIs;    if (!Direct) {      for (auto &ImportCI : ImportCIs) { -      llvm::Expected<std::unique_ptr<CompilerInstance>> IndirectCI = -          BuildIndirect(ImportCI); -      if (auto E = IndirectCI.takeError()) { -        llvm::errs() << llvm::toString(std::move(E)); -        exit(-1); -      } else { -        IndirectCIs.push_back(std::move(*IndirectCI)); -      } +      std::unique_ptr<CompilerInstance> IndirectCI = BuildIndirect(ImportCI); +      IndirectCIs.push_back(std::move(IndirectCI));      }    }    llvm::Expected<std::unique_ptr<CompilerInstance>> ExpressionCI = diff --git a/tools/diagtool/CMakeLists.txt b/tools/diagtool/CMakeLists.txt index e88c2ab6e8c3..3f7d80385a82 100644 --- a/tools/diagtool/CMakeLists.txt +++ b/tools/diagtool/CMakeLists.txt @@ -6,6 +6,7 @@ add_clang_executable(diagtool    diagtool_main.cpp    DiagTool.cpp    DiagnosticNames.cpp +  FindDiagnosticID.cpp    ListWarnings.cpp    ShowEnabledWarnings.cpp    TreeView.cpp diff --git a/tools/diagtool/FindDiagnosticID.cpp b/tools/diagtool/FindDiagnosticID.cpp new file mode 100644 index 000000000000..167b9925eedc --- /dev/null +++ b/tools/diagtool/FindDiagnosticID.cpp @@ -0,0 +1,58 @@ +//===- FindDiagnosticID.cpp - diagtool tool for finding diagnostic id -----===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "DiagTool.h" +#include "DiagnosticNames.h" +#include "clang/Basic/AllDiagnostics.h" +#include "llvm/Support/CommandLine.h" + +DEF_DIAGTOOL("find-diagnostic-id", "Print the id of the given diagnostic", +             FindDiagnosticID) + +using namespace clang; +using namespace diagtool; + +static Optional<DiagnosticRecord> +findDiagnostic(ArrayRef<DiagnosticRecord> Diagnostics, StringRef Name) { +  for (const auto &Diag : Diagnostics) { +    StringRef DiagName = Diag.getName(); +    if (DiagName == Name) +      return Diag; +  } +  return None; +} + +int FindDiagnosticID::run(unsigned int argc, char **argv, +                          llvm::raw_ostream &OS) { +  static llvm::cl::OptionCategory FindDiagnosticIDOptions( +      "diagtool find-diagnostic-id options"); + +  static llvm::cl::opt<std::string> DiagnosticName( +      llvm::cl::Positional, llvm::cl::desc("<diagnostic-name>"), +      llvm::cl::Required, llvm::cl::cat(FindDiagnosticIDOptions)); + +  std::vector<const char *> Args; +  Args.push_back("find-diagnostic-id"); +  for (const char *A : llvm::makeArrayRef(argv, argc)) +    Args.push_back(A); + +  llvm::cl::HideUnrelatedOptions(FindDiagnosticIDOptions); +  llvm::cl::ParseCommandLineOptions((int)Args.size(), Args.data(), +                                    "Diagnostic ID mapping utility"); + +  ArrayRef<DiagnosticRecord> AllDiagnostics = getBuiltinDiagnosticsByName(); +  Optional<DiagnosticRecord> Diag = +      findDiagnostic(AllDiagnostics, DiagnosticName); +  if (!Diag) { +    llvm::errs() << "error: invalid diagnostic '" << DiagnosticName << "'\n"; +    return 1; +  } +  OS << Diag->DiagID << "\n"; +  return 0; +} diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index deaab3608e62..236f264c1758 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -7086,8 +7086,10 @@ CXLinkageKind clang_getCursorLinkage(CXCursor cursor) {      switch (ND->getLinkageInternal()) {        case NoLinkage:        case VisibleNoLinkage: return CXLinkage_NoLinkage; +      case ModuleInternalLinkage:        case InternalLinkage: return CXLinkage_Internal;        case UniqueExternalLinkage: return CXLinkage_UniqueExternal; +      case ModuleLinkage:        case ExternalLinkage: return CXLinkage_External;      }; @@ -7805,6 +7807,15 @@ unsigned clang_CXXMethod_isVirtual(CXCursor C) {    return (Method && Method->isVirtual()) ? 1 : 0;  } +unsigned clang_EnumDecl_isScoped(CXCursor C) { +  if (!clang_isDeclaration(C.kind)) +    return 0; + +  const Decl *D = cxcursor::getCursorDecl(C); +  auto *Enum = dyn_cast_or_null<EnumDecl>(D); +  return (Enum && Enum->isScoped()) ? 1 : 0; +} +  //===----------------------------------------------------------------------===//  // Attribute introspection.  //===----------------------------------------------------------------------===// diff --git a/tools/libclang/CXIndexDataConsumer.cpp b/tools/libclang/CXIndexDataConsumer.cpp index 9cd5ff4f505f..a2ef68be49de 100644 --- a/tools/libclang/CXIndexDataConsumer.cpp +++ b/tools/libclang/CXIndexDataConsumer.cpp @@ -423,11 +423,13 @@ bool CXIndexDataConsumer::isFunctionLocalDecl(const Decl *D) {    if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) {      switch (ND->getFormalLinkage()) {      case NoLinkage: -    case VisibleNoLinkage:      case InternalLinkage:        return true; +    case VisibleNoLinkage: +    case ModuleInternalLinkage:      case UniqueExternalLinkage:        llvm_unreachable("Not a sema linkage"); +    case ModuleLinkage:      case ExternalLinkage:        return false;      } diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports index e78899e4c759..e0d178a5291a 100644 --- a/tools/libclang/libclang.exports +++ b/tools/libclang/libclang.exports @@ -12,6 +12,7 @@ clang_CXXMethod_isConst  clang_CXXMethod_isPureVirtual  clang_CXXMethod_isStatic  clang_CXXMethod_isVirtual +clang_EnumDecl_isScoped  clang_Cursor_getArgument  clang_Cursor_getNumTemplateArguments  clang_Cursor_getTemplateArgumentKind  | 
