summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-07-13 19:25:38 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-07-13 19:25:38 +0000
commit8746d127c04f5bbaf6c6e88cef8606ca5a6a54e9 (patch)
tree84c9d77f8c764f04bcef0b1da4eedfa233d67a46 /tools
parentcf1b401909b5e54edfd80656b1a18eaa31f9f6f1 (diff)
Diffstat (limited to 'tools')
-rw-r--r--tools/c-index-test/c-index-test.c2
-rw-r--r--tools/clang-import-test/clang-import-test.cpp18
-rw-r--r--tools/diagtool/CMakeLists.txt1
-rw-r--r--tools/diagtool/FindDiagnosticID.cpp58
-rw-r--r--tools/libclang/CIndex.cpp11
-rw-r--r--tools/libclang/CXIndexDataConsumer.cpp4
-rw-r--r--tools/libclang/libclang.exports1
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