Skip to content

Commit 20cb0da

Browse files
authored
LLVM and SPIRV-LLVM-Translator pulldown (WW49) #2836
LLVM: llvm/llvm-project@ae00879 SPIRV-LLVM-Translator: KhronosGroup/SPIRV-LLVM-Translator@54849c5
2 parents 07d0812 + 4fdbfae commit 20cb0da

File tree

2,136 files changed

+48825
-49583
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,136 files changed

+48825
-49583
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: main branch sync
2+
3+
on:
4+
push:
5+
branches:
6+
- 'master'
7+
8+
jobs:
9+
branch_sync:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout Code
13+
uses: actions/checkout@v2
14+
with:
15+
fetch-depth: 0
16+
17+
- name: Update branch
18+
env:
19+
LLVMBOT_TOKEN: ${{ secrets.LLVMBOT_MAIN_SYNC }}
20+
run: |
21+
git push https://$LLVMBOT_TOKEN@github.com/${{ github.repository }} HEAD:temp-test-main

clang-tools-extra/clang-query/QueryParser.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,6 @@ QueryRef QueryParser::parseSetTraversalKind(
134134
unsigned Value =
135135
LexOrCompleteWord<unsigned>(this, ValStr)
136136
.Case("AsIs", ast_type_traits::TK_AsIs)
137-
.Case("IgnoreImplicitCastsAndParentheses",
138-
ast_type_traits::TK_IgnoreImplicitCastsAndParentheses)
139137
.Case("IgnoreUnlessSpelledInSource",
140138
ast_type_traits::TK_IgnoreUnlessSpelledInSource)
141139
.Default(~0u);

clang-tools-extra/clang-tidy/bugprone/UnusedRaiiCheck.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,11 @@ void UnusedRaiiCheck::check(const MatchFinder::MatchResult &Result) {
7979
// written type.
8080
auto Matches =
8181
match(expr(hasDescendant(typeLoc().bind("t"))), *E, *Result.Context);
82-
const auto *TL = selectFirst<TypeLoc>("t", Matches);
83-
assert(TL);
84-
D << FixItHint::CreateInsertion(
85-
Lexer::getLocForEndOfToken(TL->getEndLoc(), 0, *Result.SourceManager,
86-
getLangOpts()),
87-
Replacement);
82+
if (const auto *TL = selectFirst<TypeLoc>("t", Matches))
83+
D << FixItHint::CreateInsertion(
84+
Lexer::getLocForEndOfToken(TL->getEndLoc(), 0, *Result.SourceManager,
85+
getLangOpts()),
86+
Replacement);
8887
}
8988

9089
} // namespace bugprone

clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ bool isCapsOnly(StringRef Name) {
3232
class MacroUsageCallbacks : public PPCallbacks {
3333
public:
3434
MacroUsageCallbacks(MacroUsageCheck *Check, const SourceManager &SM,
35-
StringRef RegExp, bool CapsOnly, bool IgnoreCommandLine)
36-
: Check(Check), SM(SM), RegExp(RegExp), CheckCapsOnly(CapsOnly),
35+
StringRef RegExpStr, bool CapsOnly, bool IgnoreCommandLine)
36+
: Check(Check), SM(SM), RegExp(RegExpStr), CheckCapsOnly(CapsOnly),
3737
IgnoreCommandLineMacros(IgnoreCommandLine) {}
3838
void MacroDefined(const Token &MacroNameTok,
3939
const MacroDirective *MD) override {
@@ -47,7 +47,7 @@ class MacroUsageCallbacks : public PPCallbacks {
4747
return;
4848

4949
StringRef MacroName = MacroNameTok.getIdentifierInfo()->getName();
50-
if (!CheckCapsOnly && !llvm::Regex(RegExp).match(MacroName))
50+
if (!CheckCapsOnly && !RegExp.match(MacroName))
5151
Check->warnMacro(MD, MacroName);
5252

5353
if (CheckCapsOnly && !isCapsOnly(MacroName))
@@ -57,7 +57,7 @@ class MacroUsageCallbacks : public PPCallbacks {
5757
private:
5858
MacroUsageCheck *Check;
5959
const SourceManager &SM;
60-
StringRef RegExp;
60+
const llvm::Regex RegExp;
6161
bool CheckCapsOnly;
6262
bool IgnoreCommandLineMacros;
6363
};

clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,32 @@ static StringRef const StyleNames[] = {
122122
#undef NAMING_KEYS
123123
// clang-format on
124124

125+
IdentifierNamingCheck::NamingStyle::NamingStyle(
126+
llvm::Optional<IdentifierNamingCheck::CaseType> Case,
127+
const std::string &Prefix, const std::string &Suffix,
128+
const std::string &IgnoredRegexpStr)
129+
: Case(Case), Prefix(Prefix), Suffix(Suffix),
130+
IgnoredRegexpStr(IgnoredRegexpStr) {
131+
if (!IgnoredRegexpStr.empty()) {
132+
IgnoredRegexp =
133+
llvm::Regex(llvm::SmallString<128>({"^", IgnoredRegexpStr, "$"}));
134+
if (!IgnoredRegexp.isValid())
135+
llvm::errs() << "Invalid IgnoredRegexp regular expression: "
136+
<< IgnoredRegexpStr;
137+
}
138+
}
139+
125140
static IdentifierNamingCheck::FileStyle
126141
getFileStyleFromOptions(const ClangTidyCheck::OptionsView &Options) {
127-
SmallVector<llvm::Optional<IdentifierNamingCheck::NamingStyle>, 0> Styles(
128-
SK_Count);
142+
SmallVector<llvm::Optional<IdentifierNamingCheck::NamingStyle>, 0> Styles;
143+
Styles.resize(SK_Count);
129144
SmallString<64> StyleString;
130145
for (unsigned I = 0; I < SK_Count; ++I) {
131146
StyleString = StyleNames[I];
132147
size_t StyleSize = StyleString.size();
148+
StyleString.append("IgnoredRegexp");
149+
std::string IgnoredRegexpStr = Options.get(StyleString, "");
150+
StyleString.resize(StyleSize);
133151
StyleString.append("Prefix");
134152
std::string Prefix(Options.get(StyleString, ""));
135153
// Fast replacement of [Pre]fix -> [Suf]fix.
@@ -141,9 +159,10 @@ getFileStyleFromOptions(const ClangTidyCheck::OptionsView &Options) {
141159
auto CaseOptional =
142160
Options.getOptional<IdentifierNamingCheck::CaseType>(StyleString);
143161

144-
if (CaseOptional || !Prefix.empty() || !Postfix.empty())
162+
if (CaseOptional || !Prefix.empty() || !Postfix.empty() ||
163+
!IgnoredRegexpStr.empty())
145164
Styles[I].emplace(std::move(CaseOptional), std::move(Prefix),
146-
std::move(Postfix));
165+
std::move(Postfix), std::move(IgnoredRegexpStr));
147166
}
148167
bool IgnoreMainLike = Options.get("IgnoreMainLikeFunctions", false);
149168
return {std::move(Styles), IgnoreMainLike};
@@ -175,6 +194,9 @@ void IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
175194
continue;
176195
StyleString = StyleNames[I];
177196
size_t StyleSize = StyleString.size();
197+
StyleString.append("IgnoredRegexp");
198+
Options.store(Opts, StyleString, Styles[I]->IgnoredRegexpStr);
199+
StyleString.resize(StyleSize);
178200
StyleString.append("Prefix");
179201
Options.store(Opts, StyleString, Styles[I]->Prefix);
180202
// Fast replacement of [Pre]fix -> [Suf]fix.
@@ -194,7 +216,7 @@ void IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
194216
}
195217

196218
static bool matchesStyle(StringRef Name,
197-
IdentifierNamingCheck::NamingStyle Style) {
219+
const IdentifierNamingCheck::NamingStyle &Style) {
198220
static llvm::Regex Matchers[] = {
199221
llvm::Regex("^.*$"),
200222
llvm::Regex("^[a-z][a-z0-9_]*$"),
@@ -589,12 +611,10 @@ static StyleKind findStyleKind(
589611

590612
// If this method has the same name as any base method, this is likely
591613
// necessary even if it's not an override. e.g. CRTP.
592-
auto FindHidden = [&](const CXXBaseSpecifier *S, clang::CXXBasePath &P) {
593-
return CXXRecordDecl::FindOrdinaryMember(S, P, Decl->getDeclName());
594-
};
595-
CXXBasePaths UnusedPaths;
596-
if (Decl->getParent()->lookupInBases(FindHidden, UnusedPaths))
597-
return SK_Invalid;
614+
for (const CXXBaseSpecifier &Base : Decl->getParent()->bases())
615+
if (const auto *RD = Base.getType()->getAsCXXRecordDecl())
616+
if (RD->hasMemberName(Decl->getDeclName()))
617+
return SK_Invalid;
598618

599619
if (Decl->isConstexpr() && NamingStyles[SK_ConstexprMethod])
600620
return SK_ConstexprMethod;
@@ -681,6 +701,9 @@ static llvm::Optional<RenamerClangTidyCheck::FailureInfo> getFailureInfo(
681701
return None;
682702

683703
const IdentifierNamingCheck::NamingStyle &Style = *NamingStyles[SK];
704+
if (Style.IgnoredRegexp.isValid() && Style.IgnoredRegexp.match(Name))
705+
return None;
706+
684707
if (matchesStyle(Name, Style))
685708
return None;
686709

clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,18 @@ class IdentifierNamingCheck final : public RenamerClangTidyCheck {
5252
NamingStyle() = default;
5353

5454
NamingStyle(llvm::Optional<CaseType> Case, const std::string &Prefix,
55-
const std::string &Suffix)
56-
: Case(Case), Prefix(Prefix), Suffix(Suffix) {}
55+
const std::string &Suffix, const std::string &IgnoredRegexpStr);
56+
NamingStyle(const NamingStyle &O) = delete;
57+
NamingStyle &operator=(NamingStyle &&O) = default;
58+
NamingStyle(NamingStyle &&O) = default;
5759

5860
llvm::Optional<CaseType> Case;
5961
std::string Prefix;
6062
std::string Suffix;
63+
// Store both compiled and non-compiled forms so original value can be
64+
// serialized
65+
llvm::Regex IgnoredRegexp;
66+
std::string IgnoredRegexpStr;
6167
};
6268

6369
struct FileStyle {

clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "ASTUtils.h"
1111
#include "clang/AST/CXXInheritance.h"
1212
#include "clang/ASTMatchers/ASTMatchFinder.h"
13+
#include "clang/Basic/CharInfo.h"
1314
#include "clang/Frontend/CompilerInstance.h"
1415
#include "clang/Lex/PPCallbacks.h"
1516
#include "clang/Lex/Preprocessor.h"
@@ -463,6 +464,8 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
463464
Failure.FixStatus = ShouldFixStatus::ConflictsWithKeyword;
464465
else if (Ident->hasMacroDefinition())
465466
Failure.FixStatus = ShouldFixStatus::ConflictsWithMacroDefinition;
467+
} else if (!isValidIdentifier(Info.Fixup)) {
468+
Failure.FixStatus = ShouldFixStatus::FixInvalidIdentifier;
466469
}
467470

468471
Failure.Info = std::move(Info);
@@ -503,7 +506,8 @@ void RenamerClangTidyCheck::expandMacro(const Token &MacroNameTok,
503506
static std::string
504507
getDiagnosticSuffix(const RenamerClangTidyCheck::ShouldFixStatus FixStatus,
505508
const std::string &Fixup) {
506-
if (Fixup.empty())
509+
if (Fixup.empty() ||
510+
FixStatus == RenamerClangTidyCheck::ShouldFixStatus::FixInvalidIdentifier)
507511
return "; cannot be fixed automatically";
508512
if (FixStatus == RenamerClangTidyCheck::ShouldFixStatus::ShouldFix)
509513
return {};
@@ -517,7 +521,6 @@ getDiagnosticSuffix(const RenamerClangTidyCheck::ShouldFixStatus FixStatus,
517521
RenamerClangTidyCheck::ShouldFixStatus::ConflictsWithMacroDefinition)
518522
return "; cannot be fixed because '" + Fixup +
519523
"' would conflict with a macro definition";
520-
521524
llvm_unreachable("invalid ShouldFixStatus");
522525
}
523526

clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ class RenamerClangTidyCheck : public ClangTidyCheck {
5959
/// automatically.
6060
ConflictsWithMacroDefinition,
6161

62+
/// The fixup results in an identifier that is not a valid c/c++ identifier.
63+
FixInvalidIdentifier,
64+
6265
/// Values pass this threshold will be ignored completely
6366
/// i.e no message, no fixup.
6467
IgnoreFailureThreshold,

clang-tools-extra/clangd/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ add_clang_library(clangDaemon
8181
SemanticSelection.cpp
8282
SourceCode.cpp
8383
QueryDriverDatabase.cpp
84+
TidyProvider.cpp
8485
TUScheduler.cpp
8586
URI.cpp
8687
XRefs.cpp
@@ -97,6 +98,7 @@ add_clang_library(clangDaemon
9798
index/IndexAction.cpp
9899
index/MemIndex.cpp
99100
index/Merge.cpp
101+
index/ProjectAware.cpp
100102
index/Ref.cpp
101103
index/Relation.cpp
102104
index/Serialization.cpp
@@ -139,7 +141,6 @@ clang_target_link_libraries(clangDaemon
139141
clangTooling
140142
clangToolingCore
141143
clangToolingInclusions
142-
clangToolingRefactoring
143144
clangToolingSyntax
144145
)
145146

@@ -168,17 +169,18 @@ if ( CLANGD_BUILD_XPC )
168169
add_subdirectory(xpc)
169170
endif ()
170171

172+
if (CLANGD_ENABLE_REMOTE)
173+
include(FindGRPC)
174+
endif()
175+
171176
if(CLANG_INCLUDE_TESTS)
172-
add_subdirectory(test)
173-
add_subdirectory(unittests)
177+
add_subdirectory(test)
178+
add_subdirectory(unittests)
174179
endif()
175180

176181
# FIXME(kirillbobyrev): Document this in the LLVM docs once remote index is stable.
177182
option(CLANGD_ENABLE_REMOTE "Use gRPC library to enable remote index support for Clangd" OFF)
178183
set(GRPC_INSTALL_PATH "" CACHE PATH "Path to gRPC library manual installation.")
179184

180-
if (CLANGD_ENABLE_REMOTE)
181-
include(FindGRPC)
182-
endif()
183185
add_subdirectory(index/remote)
184186
add_subdirectory(index/dex/dexp)

clang-tools-extra/clangd/ClangdLSPServer.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
604604
}},
605605
{"declarationProvider", true},
606606
{"definitionProvider", true},
607+
{"implementationProvider", true},
607608
{"documentHighlightProvider", true},
608609
{"documentLinkProvider",
609610
llvm::json::Object{
@@ -624,6 +625,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
624625
}},
625626
{"typeHierarchyProvider", true},
626627
{"memoryUsageProvider", true}, // clangd extension.
628+
{"callHierarchyProvider", true},
627629
}}}};
628630
if (Opts.Encoding)
629631
Result["offsetEncoding"] = *Opts.Encoding;
@@ -1223,6 +1225,26 @@ void ClangdLSPServer::onResolveTypeHierarchy(
12231225
std::move(Reply));
12241226
}
12251227

1228+
void ClangdLSPServer::onPrepareCallHierarchy(
1229+
const CallHierarchyPrepareParams &Params,
1230+
Callback<std::vector<CallHierarchyItem>> Reply) {
1231+
Server->prepareCallHierarchy(Params.textDocument.uri.file(), Params.position,
1232+
std::move(Reply));
1233+
}
1234+
1235+
void ClangdLSPServer::onCallHierarchyIncomingCalls(
1236+
const CallHierarchyIncomingCallsParams &Params,
1237+
Callback<std::vector<CallHierarchyIncomingCall>> Reply) {
1238+
Server->incomingCalls(Params.item, std::move(Reply));
1239+
}
1240+
1241+
void ClangdLSPServer::onCallHierarchyOutgoingCalls(
1242+
const CallHierarchyOutgoingCallsParams &Params,
1243+
Callback<std::vector<CallHierarchyOutgoingCall>> Reply) {
1244+
// FIXME: To be implemented.
1245+
Reply(std::vector<CallHierarchyOutgoingCall>{});
1246+
}
1247+
12261248
void ClangdLSPServer::applyConfiguration(
12271249
const ConfigurationSettings &Settings) {
12281250
// Per-file update to the compilation database.
@@ -1291,6 +1313,22 @@ void ClangdLSPServer::onReference(const ReferenceParams &Params,
12911313
});
12921314
}
12931315

1316+
void ClangdLSPServer::onGoToImplementation(
1317+
const TextDocumentPositionParams &Params,
1318+
Callback<std::vector<Location>> Reply) {
1319+
Server->findImplementations(
1320+
Params.textDocument.uri.file(), Params.position,
1321+
[Reply = std::move(Reply)](
1322+
llvm::Expected<std::vector<LocatedSymbol>> Overrides) mutable {
1323+
if (!Overrides)
1324+
return Reply(Overrides.takeError());
1325+
std::vector<Location> Impls;
1326+
for (const LocatedSymbol &Sym : *Overrides)
1327+
Impls.push_back(Sym.PreferredDeclaration);
1328+
return Reply(std::move(Impls));
1329+
});
1330+
}
1331+
12941332
void ClangdLSPServer::onSymbolInfo(const TextDocumentPositionParams &Params,
12951333
Callback<std::vector<SymbolDetails>> Reply) {
12961334
Server->symbolInfo(Params.textDocument.uri.file(), Params.position,
@@ -1431,6 +1469,7 @@ ClangdLSPServer::ClangdLSPServer(class Transport &Transp,
14311469
MsgHandler->bind("textDocument/signatureHelp", &ClangdLSPServer::onSignatureHelp);
14321470
MsgHandler->bind("textDocument/definition", &ClangdLSPServer::onGoToDefinition);
14331471
MsgHandler->bind("textDocument/declaration", &ClangdLSPServer::onGoToDeclaration);
1472+
MsgHandler->bind("textDocument/implementation", &ClangdLSPServer::onGoToImplementation);
14341473
MsgHandler->bind("textDocument/references", &ClangdLSPServer::onReference);
14351474
MsgHandler->bind("textDocument/switchSourceHeader", &ClangdLSPServer::onSwitchSourceHeader);
14361475
MsgHandler->bind("textDocument/prepareRename", &ClangdLSPServer::onPrepareRename);
@@ -1450,6 +1489,9 @@ ClangdLSPServer::ClangdLSPServer(class Transport &Transp,
14501489
MsgHandler->bind("textDocument/symbolInfo", &ClangdLSPServer::onSymbolInfo);
14511490
MsgHandler->bind("textDocument/typeHierarchy", &ClangdLSPServer::onTypeHierarchy);
14521491
MsgHandler->bind("typeHierarchy/resolve", &ClangdLSPServer::onResolveTypeHierarchy);
1492+
MsgHandler->bind("textDocument/prepareCallHierarchy", &ClangdLSPServer::onPrepareCallHierarchy);
1493+
MsgHandler->bind("callHierarchy/incomingCalls", &ClangdLSPServer::onCallHierarchyIncomingCalls);
1494+
MsgHandler->bind("callHierarchy/outgoingCalls", &ClangdLSPServer::onCallHierarchyOutgoingCalls);
14531495
MsgHandler->bind("textDocument/selectionRange", &ClangdLSPServer::onSelectionRange);
14541496
MsgHandler->bind("textDocument/documentLink", &ClangdLSPServer::onDocumentLink);
14551497
MsgHandler->bind("textDocument/semanticTokens/full", &ClangdLSPServer::onSemanticTokens);

clang-tools-extra/clangd/ClangdLSPServer.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
115115
Callback<std::vector<Location>>);
116116
void onGoToDefinition(const TextDocumentPositionParams &,
117117
Callback<std::vector<Location>>);
118+
void onGoToImplementation(const TextDocumentPositionParams &,
119+
Callback<std::vector<Location>>);
118120
void onReference(const ReferenceParams &, Callback<std::vector<Location>>);
119121
void onSwitchSourceHeader(const TextDocumentIdentifier &,
120122
Callback<llvm::Optional<URIForFile>>);
@@ -133,6 +135,14 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
133135
Callback<llvm::Optional<TypeHierarchyItem>>);
134136
void onResolveTypeHierarchy(const ResolveTypeHierarchyItemParams &,
135137
Callback<llvm::Optional<TypeHierarchyItem>>);
138+
void onPrepareCallHierarchy(const CallHierarchyPrepareParams &,
139+
Callback<std::vector<CallHierarchyItem>>);
140+
void onCallHierarchyIncomingCalls(
141+
const CallHierarchyIncomingCallsParams &,
142+
Callback<std::vector<CallHierarchyIncomingCall>>);
143+
void onCallHierarchyOutgoingCalls(
144+
const CallHierarchyOutgoingCallsParams &,
145+
Callback<std::vector<CallHierarchyOutgoingCall>>);
136146
void onChangeConfiguration(const DidChangeConfigurationParams &);
137147
void onSymbolInfo(const TextDocumentPositionParams &,
138148
Callback<std::vector<SymbolDetails>>);

0 commit comments

Comments
 (0)