Skip to content

Commit 4c4d2bb

Browse files
committed
Merge from 'main' to 'sycl-web' (145 commits)
CONFLICT (content): Merge conflict in clang/lib/Sema/SemaType.cpp CONFLICT (content): Merge conflict in clang/lib/Parse/ParseDecl.cpp
2 parents 6fa19ac + 9955f14 commit 4c4d2bb

File tree

714 files changed

+32621
-20762
lines changed

Some content is hidden

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

714 files changed

+32621
-20762
lines changed

bolt/test/Inputs/asm_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
void foo(void);
2+
13
int main() {
24
foo();
35
return 0;

bolt/test/X86/Inputs/asm_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
void foo(void);
2+
13
int main() {
24
foo();
35
return 0;

clang-tools-extra/clang-tidy/altera/StructPackAlignCheck.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ void StructPackAlignCheck::check(const MatchFinder::MatchResult &Result) {
7777
uint64_t CharSize = Result.Context->getCharWidth();
7878
CharUnits CurrSize = Result.Context->getASTRecordLayout(Struct).getSize();
7979
CharUnits MinByteSize =
80-
CharUnits::fromQuantity(ceil((float)TotalBitSize / CharSize));
80+
CharUnits::fromQuantity(std::max<clang::CharUnits::QuantityType>(
81+
ceil(static_cast<float>(TotalBitSize) / CharSize), 1));
8182
CharUnits MaxAlign = CharUnits::fromQuantity(
8283
ceil((float)Struct->getMaxAlignment() / CharSize));
8384
CharUnits CurrAlign =

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,32 @@ static std::string getCondVarNames(const Stmt *Cond) {
117117
return Result;
118118
}
119119

120-
static bool isKnownFalse(const Expr &Cond, const ASTContext &Ctx) {
121-
if (Cond.isValueDependent())
120+
static bool isKnownToHaveValue(const Expr &Cond, const ASTContext &Ctx,
121+
bool ExpectedValue) {
122+
if (Cond.isValueDependent()) {
123+
if (const auto *BinOp = dyn_cast<BinaryOperator>(&Cond)) {
124+
// Conjunctions (disjunctions) can still be handled if at least one
125+
// conjunct (disjunct) is known to be false (true).
126+
if (!ExpectedValue && BinOp->getOpcode() == BO_LAnd)
127+
return isKnownToHaveValue(*BinOp->getLHS(), Ctx, false) ||
128+
isKnownToHaveValue(*BinOp->getRHS(), Ctx, false);
129+
if (ExpectedValue && BinOp->getOpcode() == BO_LOr)
130+
return isKnownToHaveValue(*BinOp->getLHS(), Ctx, true) ||
131+
isKnownToHaveValue(*BinOp->getRHS(), Ctx, true);
132+
if (BinOp->getOpcode() == BO_Comma)
133+
return isKnownToHaveValue(*BinOp->getRHS(), Ctx, ExpectedValue);
134+
} else if (const auto *UnOp = dyn_cast<UnaryOperator>(&Cond)) {
135+
if (UnOp->getOpcode() == UO_LNot)
136+
return isKnownToHaveValue(*UnOp->getSubExpr(), Ctx, !ExpectedValue);
137+
} else if (const auto *Paren = dyn_cast<ParenExpr>(&Cond))
138+
return isKnownToHaveValue(*Paren->getSubExpr(), Ctx, ExpectedValue);
139+
else if (const auto *ImplCast = dyn_cast<ImplicitCastExpr>(&Cond))
140+
return isKnownToHaveValue(*ImplCast->getSubExpr(), Ctx, ExpectedValue);
122141
return false;
142+
}
123143
bool Result = false;
124144
if (Cond.EvaluateAsBooleanCondition(Result, Ctx))
125-
return !Result;
145+
return Result == ExpectedValue;
126146
return false;
127147
}
128148

@@ -144,7 +164,7 @@ void InfiniteLoopCheck::check(const MatchFinder::MatchResult &Result) {
144164
const auto *LoopStmt = Result.Nodes.getNodeAs<Stmt>("loop-stmt");
145165
const auto *Func = Result.Nodes.getNodeAs<Decl>("func");
146166

147-
if (isKnownFalse(*Cond, *Result.Context))
167+
if (isKnownToHaveValue(*Cond, *Result.Context, false))
148168
return;
149169

150170
bool ShouldHaveConditionVariables = true;

clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ void CalleeNamespaceCheck::check(const MatchFinder::MatchResult &Result) {
5252
if (NS && NS->getName() == "__llvm_libc")
5353
return;
5454

55-
if (IgnoredFunctions.contains(FuncDecl->getName()))
55+
const DeclarationName &Name = FuncDecl->getDeclName();
56+
if (Name.isIdentifier() &&
57+
IgnoredFunctions.contains(Name.getAsIdentifierInfo()->getName()))
5658
return;
5759

5860
diag(UsageSiteExpr->getBeginLoc(), "%0 must resolve to a function declared "

clang-tools-extra/clang-tidy/modernize/MacroToEnumCheck.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ class MacroToEnumCallbacks : public PPCallbacks {
222222
void conditionStart(const SourceLocation &Loc);
223223
void checkCondition(SourceRange ConditionRange);
224224
void checkName(const Token &MacroNameTok);
225+
void rememberExpressionName(const Token &MacroNameTok);
226+
void invalidateExpressionNames();
225227
void warnMacroEnum(const EnumMacro &Macro) const;
226228
void fixEnumMacro(const MacroList &MacroList) const;
227229

@@ -230,6 +232,7 @@ class MacroToEnumCallbacks : public PPCallbacks {
230232
const SourceManager &SM;
231233
SmallVector<MacroList> Enums;
232234
SmallVector<FileState> Files;
235+
std::vector<std::string> ExpressionNames;
233236
FileState *CurrentFile = nullptr;
234237
};
235238

@@ -284,15 +287,24 @@ void MacroToEnumCallbacks::checkCondition(SourceRange Range) {
284287
}
285288

286289
void MacroToEnumCallbacks::checkName(const Token &MacroNameTok) {
287-
StringRef Id = getTokenName(MacroNameTok);
290+
rememberExpressionName(MacroNameTok);
288291

292+
StringRef Id = getTokenName(MacroNameTok);
289293
llvm::erase_if(Enums, [&Id](const MacroList &MacroList) {
290294
return llvm::any_of(MacroList, [&Id](const EnumMacro &Macro) {
291295
return getTokenName(Macro.Name) == Id;
292296
});
293297
});
294298
}
295299

300+
void MacroToEnumCallbacks::rememberExpressionName(const Token &MacroNameTok) {
301+
std::string Id = getTokenName(MacroNameTok).str();
302+
auto Pos = llvm::lower_bound(ExpressionNames, Id);
303+
if (Pos == ExpressionNames.end() || *Pos != Id) {
304+
ExpressionNames.insert(Pos, Id);
305+
}
306+
}
307+
296308
void MacroToEnumCallbacks::FileChanged(SourceLocation Loc,
297309
FileChangeReason Reason,
298310
SrcMgr::CharacteristicKind FileType,
@@ -384,6 +396,8 @@ void MacroToEnumCallbacks::MacroDefined(const Token &MacroNameTok,
384396
void MacroToEnumCallbacks::MacroUndefined(const Token &MacroNameTok,
385397
const MacroDefinition &MD,
386398
const MacroDirective *Undef) {
399+
rememberExpressionName(MacroNameTok);
400+
387401
auto MatchesToken = [&MacroNameTok](const EnumMacro &Macro) {
388402
return getTokenName(Macro.Name) == getTokenName(MacroNameTok);
389403
};
@@ -447,7 +461,19 @@ void MacroToEnumCallbacks::PragmaDirective(SourceLocation Loc,
447461
CurrentFile->GuardScanner = IncludeGuard::IfGuard;
448462
}
449463

464+
void MacroToEnumCallbacks::invalidateExpressionNames() {
465+
for (const std::string &Id : ExpressionNames) {
466+
llvm::erase_if(Enums, [Id](const MacroList &MacroList) {
467+
return llvm::any_of(MacroList, [&Id](const EnumMacro &Macro) {
468+
return getTokenName(Macro.Name) == Id;
469+
});
470+
});
471+
}
472+
}
473+
450474
void MacroToEnumCallbacks::EndOfMainFile() {
475+
invalidateExpressionNames();
476+
451477
for (const MacroList &MacroList : Enums) {
452478
if (MacroList.empty())
453479
continue;

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,17 @@ void ContainerSizeEmptyCheck::check(const MatchFinder::MatchResult &Result) {
191191
std::string ReplacementText = std::string(
192192
Lexer::getSourceText(CharSourceRange::getTokenRange(E->getSourceRange()),
193193
*Result.SourceManager, getLangOpts()));
194-
if (isBinaryOrTernary(E) || isa<UnaryOperator>(E)) {
194+
const auto *OpCallExpr = dyn_cast<CXXOperatorCallExpr>(E);
195+
if (isBinaryOrTernary(E) || isa<UnaryOperator>(E) ||
196+
(OpCallExpr && (OpCallExpr->getOperator() == OO_Star))) {
195197
ReplacementText = "(" + ReplacementText + ")";
196198
}
197-
if (E->getType()->isPointerType())
199+
if (OpCallExpr &&
200+
OpCallExpr->getOperator() == OverloadedOperatorKind::OO_Arrow) {
201+
// This can happen if the object is a smart pointer. Don't add anything
202+
// because a '->' is already there (PR#51776), just call the method.
203+
ReplacementText += "empty()";
204+
} else if (E->getType()->isPointerType())
198205
ReplacementText += "->empty()";
199206
else
200207
ReplacementText += ".empty()";

clang-tools-extra/clangd/FindTarget.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,11 +384,14 @@ struct TargetFinder {
384384
}
385385
void VisitDeducedTemplateSpecializationType(
386386
const DeducedTemplateSpecializationType *DTST) {
387+
if (const auto *USD = DTST->getTemplateName().getAsUsingShadowDecl())
388+
Outer.add(USD, Flags);
389+
387390
// FIXME: This is a workaround for https://llvm.org/PR42914,
388391
// which is causing DTST->getDeducedType() to be empty. We
389392
// fall back to the template pattern and miss the instantiation
390393
// even when it's known in principle. Once that bug is fixed,
391-
// this method can be removed (the existing handling in
394+
// the following code can be removed (the existing handling in
392395
// VisitDeducedType() is sufficient).
393396
if (auto *TD = DTST->getTemplateName().getAsTemplateDecl())
394397
Outer.add(TD->getTemplatedDecl(), Flags | Rel::TemplatePattern);
@@ -419,6 +422,9 @@ struct TargetFinder {
419422
VisitTemplateSpecializationType(const TemplateSpecializationType *TST) {
420423
// Have to handle these case-by-case.
421424

425+
if (const auto *UTN = TST->getTemplateName().getAsUsingShadowDecl())
426+
Outer.add(UTN, Flags);
427+
422428
// templated type aliases: there's no specialized/instantiated using
423429
// decl to point to. So try to find a decl for the underlying type
424430
// (after substitution), and failing that point to the (templated) using
@@ -508,6 +514,9 @@ struct TargetFinder {
508514
Arg.getAsTemplateOrTemplatePattern().getAsTemplateDecl()) {
509515
report(TD, Flags);
510516
}
517+
if (const auto *USD =
518+
Arg.getAsTemplateOrTemplatePattern().getAsUsingShadowDecl())
519+
add(USD, Flags);
511520
}
512521
}
513522
};

clang-tools-extra/clangd/IncludeCleaner.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,29 @@ class ReferencedLocationCrawler
7979
}
8080

8181
bool VisitTemplateSpecializationType(TemplateSpecializationType *TST) {
82-
add(TST->getTemplateName().getAsTemplateDecl()); // Primary template.
82+
// Using templateName case is handled by the override TraverseTemplateName.
83+
if (TST->getTemplateName().getKind() == TemplateName::UsingTemplate)
84+
return true;
8385
add(TST->getAsCXXRecordDecl()); // Specialization
8486
return true;
8587
}
8688

89+
// There is no VisitTemplateName in RAV, thus we override the Traverse version
90+
// to handle the Using TemplateName case.
91+
bool TraverseTemplateName(TemplateName TN) {
92+
VisitTemplateName(TN);
93+
return Base::TraverseTemplateName(TN);
94+
}
95+
// A pseudo VisitTemplateName, dispatched by the above TraverseTemplateName!
96+
bool VisitTemplateName(TemplateName TN) {
97+
if (const auto *USD = TN.getAsUsingShadowDecl()) {
98+
add(USD);
99+
return true;
100+
}
101+
add(TN.getAsTemplateDecl()); // Primary template.
102+
return true;
103+
}
104+
87105
bool VisitUsingType(UsingType *UT) {
88106
add(UT->getFoundDecl());
89107
return true;

clang-tools-extra/clangd/IncludeFixer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ std::vector<Fix> IncludeFixer::fix(DiagnosticsEngine::Level DiagLevel,
197197
case diag::err_no_member_template:
198198
case diag::err_no_member_template_suggest:
199199
case diag::warn_implicit_function_decl:
200-
case diag::ext_implicit_function_decl:
200+
case diag::ext_implicit_function_decl_c99:
201201
case diag::err_opencl_implicit_function_decl:
202202
dlog("Unresolved name at {0}, last typo was {1}",
203203
Info.getLocation().printToString(Info.getSourceManager()),

0 commit comments

Comments
 (0)