Skip to content

Commit f803376

Browse files
committed
Merge from 'master' to 'sycl-web' (#1)
CONFLICT (content): Merge conflict in clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
2 parents b13c144 + a45f713 commit f803376

File tree

698 files changed

+22964
-13181
lines changed

Some content is hidden

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

698 files changed

+22964
-13181
lines changed

clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ bool isTemplateParameter(TypeLoc Type) {
347347

348348
ChangeNamespaceTool::ChangeNamespaceTool(
349349
llvm::StringRef OldNs, llvm::StringRef NewNs, llvm::StringRef FilePattern,
350-
llvm::ArrayRef<std::string> WhiteListedSymbolPatterns,
350+
llvm::ArrayRef<std::string> AllowedSymbolPatterns,
351351
std::map<std::string, tooling::Replacements> *FileToReplacements,
352352
llvm::StringRef FallbackStyle)
353353
: FallbackStyle(FallbackStyle), FileToReplacements(*FileToReplacements),
@@ -365,8 +365,8 @@ ChangeNamespaceTool::ChangeNamespaceTool(
365365
DiffOldNamespace = joinNamespaces(OldNsSplitted);
366366
DiffNewNamespace = joinNamespaces(NewNsSplitted);
367367

368-
for (const auto &Pattern : WhiteListedSymbolPatterns)
369-
WhiteListedSymbolRegexes.emplace_back(Pattern);
368+
for (const auto &Pattern : AllowedSymbolPatterns)
369+
AllowedSymbolRegexes.emplace_back(Pattern);
370370
}
371371

372372
void ChangeNamespaceTool::registerMatchers(ast_matchers::MatchFinder *Finder) {
@@ -800,7 +800,7 @@ void ChangeNamespaceTool::replaceQualifiedSymbolInDeclContext(
800800
Result.SourceManager->getSpellingLoc(End)),
801801
*Result.SourceManager, Result.Context->getLangOpts());
802802
std::string FromDeclName = FromDecl->getQualifiedNameAsString();
803-
for (llvm::Regex &RE : WhiteListedSymbolRegexes)
803+
for (llvm::Regex &RE : AllowedSymbolRegexes)
804804
if (RE.match(FromDeclName))
805805
return;
806806
std::string ReplaceName =

clang-tools-extra/clang-change-namespace/ChangeNamespace.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class ChangeNamespaceTool : public ast_matchers::MatchFinder::MatchCallback {
4949
// files matching `FilePattern`.
5050
ChangeNamespaceTool(
5151
llvm::StringRef OldNs, llvm::StringRef NewNs, llvm::StringRef FilePattern,
52-
llvm::ArrayRef<std::string> WhiteListedSymbolPatterns,
52+
llvm::ArrayRef<std::string> AllowedSymbolPatterns,
5353
std::map<std::string, tooling::Replacements> *FileToReplacements,
5454
llvm::StringRef FallbackStyle = "LLVM");
5555

@@ -166,7 +166,7 @@ class ChangeNamespaceTool : public ast_matchers::MatchFinder::MatchCallback {
166166
llvm::SmallPtrSet<const clang::DeclRefExpr*, 16> ProcessedFuncRefs;
167167
// Patterns of symbol names whose references are not expected to be updated
168168
// when changing namespaces around them.
169-
std::vector<llvm::Regex> WhiteListedSymbolRegexes;
169+
std::vector<llvm::Regex> AllowedSymbolRegexes;
170170
};
171171

172172
} // namespace change_namespace

clang-tools-extra/clang-change-namespace/tool/ClangChangeNamespace.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,20 @@ cl::opt<std::string> Style("style",
7272
cl::desc("The style name used for reformatting."),
7373
cl::init("LLVM"), cl::cat(ChangeNamespaceCategory));
7474

75-
cl::opt<std::string> WhiteListFile(
76-
"whitelist_file",
75+
cl::opt<std::string> AllowedFile(
76+
"allowed_file",
7777
cl::desc("A file containing regexes of symbol names that are not expected "
7878
"to be updated when changing namespaces around them."),
7979
cl::init(""), cl::cat(ChangeNamespaceCategory));
8080

81-
llvm::ErrorOr<std::vector<std::string>> GetWhiteListedSymbolPatterns() {
81+
llvm::ErrorOr<std::vector<std::string>> GetAllowedSymbolPatterns() {
8282
std::vector<std::string> Patterns;
83-
if (WhiteListFile.empty())
83+
if (AllowedFile.empty())
8484
return Patterns;
8585

8686
llvm::SmallVector<StringRef, 8> Lines;
8787
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
88-
llvm::MemoryBuffer::getFile(WhiteListFile);
88+
llvm::MemoryBuffer::getFile(AllowedFile);
8989
if (!File)
9090
return File.getError();
9191
llvm::StringRef Content = File.get()->getBuffer();
@@ -103,15 +103,15 @@ int main(int argc, const char **argv) {
103103
ChangeNamespaceCategory);
104104
const auto &Files = OptionsParser.getSourcePathList();
105105
tooling::RefactoringTool Tool(OptionsParser.getCompilations(), Files);
106-
llvm::ErrorOr<std::vector<std::string>> WhiteListPatterns =
107-
GetWhiteListedSymbolPatterns();
108-
if (!WhiteListPatterns) {
109-
llvm::errs() << "Failed to open whitelist file " << WhiteListFile << ". "
110-
<< WhiteListPatterns.getError().message() << "\n";
106+
llvm::ErrorOr<std::vector<std::string>> AllowedPatterns =
107+
GetAllowedSymbolPatterns();
108+
if (!AllowedPatterns) {
109+
llvm::errs() << "Failed to open allow file " << AllowedFile << ". "
110+
<< AllowedPatterns.getError().message() << "\n";
111111
return 1;
112112
}
113113
change_namespace::ChangeNamespaceTool NamespaceTool(
114-
OldNamespace, NewNamespace, FilePattern, *WhiteListPatterns,
114+
OldNamespace, NewNamespace, FilePattern, *AllowedPatterns,
115115
&Tool.getReplacements(), Style);
116116
ast_matchers::MatchFinder Finder;
117117
NamespaceTool.registerMatchers(&Finder);

clang-tools-extra/clang-tidy/ClangTidy.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ class ErrorReporter {
122122
{
123123
auto Level = static_cast<DiagnosticsEngine::Level>(Error.DiagLevel);
124124
std::string Name = Error.DiagnosticName;
125+
if (!Error.EnabledDiagnosticAliases.empty())
126+
Name += "," + llvm::join(Error.EnabledDiagnosticAliases, ",");
125127
if (Error.IsWarningAsError) {
126128
Name += ",-warnings-as-errors";
127129
Level = DiagnosticsEngine::Error;

clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "llvm/ADT/STLExtras.h"
2828
#include "llvm/ADT/SmallString.h"
2929
#include "llvm/Support/Regex.h"
30+
#include "llvm/Support/FormatVariadic.h"
3031
#include <tuple>
3132
#include <vector>
3233
using namespace clang;
@@ -634,6 +635,8 @@ void ClangTidyDiagnosticConsumer::removeIncompatibleErrors() {
634635
std::tuple<unsigned, EventType, int, int, unsigned> Priority;
635636
};
636637

638+
removeDuplicatedDiagnosticsOfAliasCheckers();
639+
637640
// Compute error sizes.
638641
std::vector<int> Sizes;
639642
std::vector<
@@ -728,3 +731,59 @@ std::vector<ClangTidyError> ClangTidyDiagnosticConsumer::take() {
728731
removeIncompatibleErrors();
729732
return std::move(Errors);
730733
}
734+
735+
namespace {
736+
struct LessClangTidyErrorWithoutDiagnosticName {
737+
bool operator()(const ClangTidyError *LHS, const ClangTidyError *RHS) const {
738+
const tooling::DiagnosticMessage &M1 = LHS->Message;
739+
const tooling::DiagnosticMessage &M2 = RHS->Message;
740+
741+
return std::tie(M1.FilePath, M1.FileOffset, M1.Message) <
742+
std::tie(M2.FilePath, M2.FileOffset, M2.Message);
743+
}
744+
};
745+
} // end anonymous namespace
746+
747+
void ClangTidyDiagnosticConsumer::removeDuplicatedDiagnosticsOfAliasCheckers() {
748+
using UniqueErrorSet =
749+
std::set<ClangTidyError *, LessClangTidyErrorWithoutDiagnosticName>;
750+
UniqueErrorSet UniqueErrors;
751+
752+
auto IT = Errors.begin();
753+
while (IT != Errors.end()) {
754+
ClangTidyError &Error = *IT;
755+
std::pair<UniqueErrorSet::iterator, bool> Inserted =
756+
UniqueErrors.insert(&Error);
757+
758+
// Unique error, we keep it and move along.
759+
if (Inserted.second) {
760+
++IT;
761+
} else {
762+
ClangTidyError &ExistingError = **Inserted.first;
763+
const llvm::StringMap<tooling::Replacements> &CandidateFix =
764+
Error.Message.Fix;
765+
const llvm::StringMap<tooling::Replacements> &ExistingFix =
766+
(*Inserted.first)->Message.Fix;
767+
768+
if (CandidateFix != ExistingFix) {
769+
770+
// In case of a conflict, don't suggest any fix-it.
771+
ExistingError.Message.Fix.clear();
772+
ExistingError.Notes.emplace_back(
773+
llvm::formatv("cannot apply fix-it because an alias checker has "
774+
"suggested a different fix-it; please remove one of "
775+
"the checkers ('{0}', '{1}') or "
776+
"ensure they are both configured the same",
777+
ExistingError.DiagnosticName, Error.DiagnosticName)
778+
.str());
779+
}
780+
781+
if (Error.IsWarningAsError)
782+
ExistingError.IsWarningAsError = true;
783+
784+
// Since it is the same error, we should take it as alias and remove it.
785+
ExistingError.EnabledDiagnosticAliases.emplace_back(Error.DiagnosticName);
786+
IT = Errors.erase(IT);
787+
}
788+
}
789+
}

clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ struct ClangTidyError : tooling::Diagnostic {
4848
bool IsWarningAsError);
4949

5050
bool IsWarningAsError;
51+
std::vector<std::string> EnabledDiagnosticAliases;
5152
};
5253

5354
/// Contains displayed and ignored diagnostic counters for a ClangTidy
@@ -246,6 +247,7 @@ class ClangTidyDiagnosticConsumer : public DiagnosticConsumer {
246247
private:
247248
void finalizeLastError();
248249
void removeIncompatibleErrors();
250+
void removeDuplicatedDiagnosticsOfAliasCheckers();
249251

250252
/// Returns the \c HeaderFilter constructed for the options set in the
251253
/// context.

clang-tools-extra/clang-tidy/ClangTidyOptions.cpp

Lines changed: 65 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -194,22 +194,35 @@ ConfigOptionsProvider::ConfigOptionsProvider(
194194
const ClangTidyGlobalOptions &GlobalOptions,
195195
const ClangTidyOptions &DefaultOptions,
196196
const ClangTidyOptions &ConfigOptions,
197-
const ClangTidyOptions &OverrideOptions)
198-
: DefaultOptionsProvider(GlobalOptions, DefaultOptions),
199-
ConfigOptions(ConfigOptions), OverrideOptions(OverrideOptions) {}
197+
const ClangTidyOptions &OverrideOptions,
198+
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS)
199+
: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
200+
FS),
201+
ConfigOptions(ConfigOptions) {}
200202

201203
std::vector<OptionsSource>
202204
ConfigOptionsProvider::getRawOptions(llvm::StringRef FileName) {
203205
std::vector<OptionsSource> RawOptions =
204206
DefaultOptionsProvider::getRawOptions(FileName);
207+
if (ConfigOptions.InheritParentConfig.getValueOr(false)) {
208+
LLVM_DEBUG(llvm::dbgs()
209+
<< "Getting options for file " << FileName << "...\n");
210+
assert(FS && "FS must be set.");
211+
212+
llvm::SmallString<128> AbsoluteFilePath(FileName);
213+
214+
if (!FS->makeAbsolute(AbsoluteFilePath)) {
215+
addRawFileOptions(AbsoluteFilePath, RawOptions);
216+
}
217+
}
205218
RawOptions.emplace_back(ConfigOptions,
206219
OptionsSourceTypeConfigCommandLineOption);
207220
RawOptions.emplace_back(OverrideOptions,
208221
OptionsSourceTypeCheckCommandLineOption);
209222
return RawOptions;
210223
}
211224

212-
FileOptionsProvider::FileOptionsProvider(
225+
FileOptionsBaseProvider::FileOptionsBaseProvider(
213226
const ClangTidyGlobalOptions &GlobalOptions,
214227
const ClangTidyOptions &DefaultOptions,
215228
const ClangTidyOptions &OverrideOptions,
@@ -221,36 +234,21 @@ FileOptionsProvider::FileOptionsProvider(
221234
ConfigHandlers.emplace_back(".clang-tidy", parseConfiguration);
222235
}
223236

224-
FileOptionsProvider::FileOptionsProvider(
237+
FileOptionsBaseProvider::FileOptionsBaseProvider(
225238
const ClangTidyGlobalOptions &GlobalOptions,
226239
const ClangTidyOptions &DefaultOptions,
227240
const ClangTidyOptions &OverrideOptions,
228-
const FileOptionsProvider::ConfigFileHandlers &ConfigHandlers)
241+
const FileOptionsBaseProvider::ConfigFileHandlers &ConfigHandlers)
229242
: DefaultOptionsProvider(GlobalOptions, DefaultOptions),
230243
OverrideOptions(OverrideOptions), ConfigHandlers(ConfigHandlers) {}
231244

232-
// FIXME: This method has some common logic with clang::format::getStyle().
233-
// Consider pulling out common bits to a findParentFileWithName function or
234-
// similar.
235-
std::vector<OptionsSource>
236-
FileOptionsProvider::getRawOptions(StringRef FileName) {
237-
LLVM_DEBUG(llvm::dbgs() << "Getting options for file " << FileName
238-
<< "...\n");
239-
assert(FS && "FS must be set.");
240-
241-
llvm::SmallString<128> AbsoluteFilePath(FileName);
245+
void FileOptionsBaseProvider::addRawFileOptions(
246+
llvm::StringRef AbsolutePath, std::vector<OptionsSource> &CurOptions) {
247+
auto CurSize = CurOptions.size();
242248

243-
if (FS->makeAbsolute(AbsoluteFilePath))
244-
return {};
245-
246-
std::vector<OptionsSource> RawOptions =
247-
DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str());
248-
OptionsSource CommandLineOptions(OverrideOptions,
249-
OptionsSourceTypeCheckCommandLineOption);
250-
size_t FirstFileConfig = RawOptions.size();
251249
// Look for a suitable configuration file in all parent directories of the
252250
// file. Start with the immediate parent directory and move up.
253-
StringRef Path = llvm::sys::path::parent_path(AbsoluteFilePath.str());
251+
StringRef Path = llvm::sys::path::parent_path(AbsolutePath);
254252
for (StringRef CurrentPath = Path; !CurrentPath.empty();
255253
CurrentPath = llvm::sys::path::parent_path(CurrentPath)) {
256254
llvm::Optional<OptionsSource> Result;
@@ -273,21 +271,58 @@ FileOptionsProvider::getRawOptions(StringRef FileName) {
273271
}
274272
CachedOptions[Path] = *Result;
275273

276-
RawOptions.push_back(*Result);
277-
if (!Result->first.InheritParentConfig ||
278-
!*Result->first.InheritParentConfig)
274+
CurOptions.push_back(*Result);
275+
if (!Result->first.InheritParentConfig.getValueOr(false))
279276
break;
280277
}
281278
}
282279
// Reverse order of file configs because closer configs should have higher
283280
// priority.
284-
std::reverse(RawOptions.begin() + FirstFileConfig, RawOptions.end());
281+
std::reverse(CurOptions.begin() + CurSize, CurOptions.end());
282+
}
283+
284+
FileOptionsProvider::FileOptionsProvider(
285+
const ClangTidyGlobalOptions &GlobalOptions,
286+
const ClangTidyOptions &DefaultOptions,
287+
const ClangTidyOptions &OverrideOptions,
288+
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS)
289+
: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
290+
VFS){};
291+
292+
FileOptionsProvider::FileOptionsProvider(
293+
const ClangTidyGlobalOptions &GlobalOptions,
294+
const ClangTidyOptions &DefaultOptions,
295+
const ClangTidyOptions &OverrideOptions,
296+
const FileOptionsBaseProvider::ConfigFileHandlers &ConfigHandlers)
297+
: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
298+
ConfigHandlers) {}
299+
300+
// FIXME: This method has some common logic with clang::format::getStyle().
301+
// Consider pulling out common bits to a findParentFileWithName function or
302+
// similar.
303+
std::vector<OptionsSource>
304+
FileOptionsProvider::getRawOptions(StringRef FileName) {
305+
LLVM_DEBUG(llvm::dbgs() << "Getting options for file " << FileName
306+
<< "...\n");
307+
assert(FS && "FS must be set.");
308+
309+
llvm::SmallString<128> AbsoluteFilePath(FileName);
310+
311+
if (FS->makeAbsolute(AbsoluteFilePath))
312+
return {};
313+
314+
std::vector<OptionsSource> RawOptions =
315+
DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str());
316+
addRawFileOptions(AbsoluteFilePath, RawOptions);
317+
OptionsSource CommandLineOptions(OverrideOptions,
318+
OptionsSourceTypeCheckCommandLineOption);
319+
285320
RawOptions.push_back(CommandLineOptions);
286321
return RawOptions;
287322
}
288323

289324
llvm::Optional<OptionsSource>
290-
FileOptionsProvider::tryReadConfigFile(StringRef Directory) {
325+
FileOptionsBaseProvider::tryReadConfigFile(StringRef Directory) {
291326
assert(!Directory.empty());
292327

293328
if (!llvm::sys::fs::is_directory(Directory)) {

0 commit comments

Comments
 (0)