Skip to content

Commit 9a0cb31

Browse files
author
Jenkins
committed
merge main into amd-staging
Change-Id: I82a51b97f5df36fcdb27a1fbf597afb2305e6bb1
2 parents edc6ce7 + 38b0e1c commit 9a0cb31

File tree

21 files changed

+1262
-38
lines changed

21 files changed

+1262
-38
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ using namespace clang::ast_matchers;
1515
namespace clang::tidy::bugprone {
1616

1717
void ThrowKeywordMissingCheck::registerMatchers(MatchFinder *Finder) {
18-
auto CtorInitializerList =
19-
cxxConstructorDecl(hasAnyConstructorInitializer(anything()));
20-
2118
Finder->addMatcher(
2219
cxxConstructExpr(
2320
hasType(cxxRecordDecl(
@@ -27,7 +24,7 @@ void ThrowKeywordMissingCheck::registerMatchers(MatchFinder *Finder) {
2724
stmt(anyOf(cxxThrowExpr(), callExpr(), returnStmt()))),
2825
hasAncestor(decl(anyOf(varDecl(), fieldDecl()))),
2926
hasAncestor(expr(cxxNewExpr(hasAnyPlacementArg(anything())))),
30-
allOf(hasAncestor(CtorInitializerList),
27+
allOf(hasAncestor(cxxConstructorDecl()),
3128
unless(hasAncestor(cxxCatchStmt()))))))
3229
.bind("temporary-exception-not-thrown"),
3330
this);

clang-tools-extra/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ Changes in existing checks
177177
usages of ``sizeof()``, ``alignof()``, and ``offsetof()`` when adding or
178178
subtracting from a pointer directly or when used to scale a numeric value.
179179

180+
- Improved :doc:`bugprone-throw-keyword-missing
181+
<clang-tidy/checks/bugprone/throw-keyword-missing>` by fixing a false positive
182+
when using non-static member initializers and a constructor.
183+
180184
- Improved :doc:`bugprone-unchecked-optional-access
181185
<clang-tidy/checks/bugprone/unchecked-optional-access>` to support
182186
`bsl::optional` and `bdlb::NullableValue` from

clang-tools-extra/test/clang-tidy/checkers/bugprone/throw-keyword-missing.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,15 @@ CtorInitializerListTest::CtorInitializerListTest(float) try : exc(RegularExcepti
139139
RegularException();
140140
}
141141

142+
namespace GH115055 {
143+
class CtorInitializerListTest2 {
144+
public:
145+
CtorInitializerListTest2() {}
146+
private:
147+
RegularException exc{};
148+
};
149+
} // namespace GH115055
150+
142151
RegularException funcReturningExceptionTest(int i) {
143152
return RegularException();
144153
}

llvm/include/llvm/ADT/STLExtras.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,8 @@ static constexpr bool HasFreeFunctionRBegin =
416416
} // namespace detail
417417

418418
// Returns an iterator_range over the given container which iterates in reverse.
419-
template <typename ContainerTy> auto reverse(ContainerTy &&C) {
419+
// Does not mutate the container.
420+
template <typename ContainerTy> [[nodiscard]] auto reverse(ContainerTy &&C) {
420421
if constexpr (detail::HasFreeFunctionRBegin<ContainerTy>)
421422
return make_range(adl_rbegin(C), adl_rend(C));
422423
else
@@ -1182,11 +1183,13 @@ template <typename ValueT, typename... RangeTs> class concat_range {
11821183

11831184
} // end namespace detail
11841185

1185-
/// Concatenated range across two or more ranges.
1186+
/// Returns a concatenated range across two or more ranges. Does not modify the
1187+
/// ranges.
11861188
///
11871189
/// The desired value type must be explicitly specified.
11881190
template <typename ValueT, typename... RangeTs>
1189-
detail::concat_range<ValueT, RangeTs...> concat(RangeTs &&... Ranges) {
1191+
[[nodiscard]] detail::concat_range<ValueT, RangeTs...>
1192+
concat(RangeTs &&...Ranges) {
11901193
static_assert(sizeof...(RangeTs) > 1,
11911194
"Need more than one range to concatenate!");
11921195
return detail::concat_range<ValueT, RangeTs...>(

llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -995,9 +995,9 @@ static bool selectDebugInstr(MachineInstr &I, MachineRegisterInfo &MRI,
995995
LLT Ty = MRI.getType(Reg);
996996
const RegClassOrRegBank &RegClassOrBank = MRI.getRegClassOrRegBank(Reg);
997997
const TargetRegisterClass *RC =
998-
RegClassOrBank.dyn_cast<const TargetRegisterClass *>();
998+
dyn_cast<const TargetRegisterClass *>(RegClassOrBank);
999999
if (!RC) {
1000-
const RegisterBank &RB = *RegClassOrBank.get<const RegisterBank *>();
1000+
const RegisterBank &RB = *cast<const RegisterBank *>(RegClassOrBank);
10011001
RC = getRegClassForTypeOnBank(Ty, RB);
10021002
if (!RC) {
10031003
LLVM_DEBUG(
@@ -2590,14 +2590,14 @@ bool AArch64InstructionSelector::select(MachineInstr &I) {
25902590
const RegClassOrRegBank &RegClassOrBank =
25912591
MRI.getRegClassOrRegBank(DefReg);
25922592

2593-
const TargetRegisterClass *DefRC
2594-
= RegClassOrBank.dyn_cast<const TargetRegisterClass *>();
2593+
const TargetRegisterClass *DefRC =
2594+
dyn_cast<const TargetRegisterClass *>(RegClassOrBank);
25952595
if (!DefRC) {
25962596
if (!DefTy.isValid()) {
25972597
LLVM_DEBUG(dbgs() << "PHI operand has no type, not a gvreg?\n");
25982598
return false;
25992599
}
2600-
const RegisterBank &RB = *RegClassOrBank.get<const RegisterBank *>();
2600+
const RegisterBank &RB = *cast<const RegisterBank *>(RegClassOrBank);
26012601
DefRC = getRegClassForTypeOnBank(DefTy, RB);
26022602
if (!DefRC) {
26032603
LLVM_DEBUG(dbgs() << "PHI operand has unexpected size/bank\n");
@@ -4677,7 +4677,7 @@ AArch64InstructionSelector::emitCSINC(Register Dst, Register Src1,
46774677
// If we used a register class, then this won't necessarily have an LLT.
46784678
// Compute the size based off whether or not we have a class or bank.
46794679
unsigned Size;
4680-
if (const auto *RC = RegClassOrBank.dyn_cast<const TargetRegisterClass *>())
4680+
if (const auto *RC = dyn_cast<const TargetRegisterClass *>(RegClassOrBank))
46814681
Size = TRI.getRegSizeInBits(*RC);
46824682
else
46834683
Size = MRI.getType(Dst).getSizeInBits();

llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ bool AMDGPUInstructionSelector::isVCC(Register Reg,
8181

8282
auto &RegClassOrBank = MRI.getRegClassOrRegBank(Reg);
8383
const TargetRegisterClass *RC =
84-
RegClassOrBank.dyn_cast<const TargetRegisterClass*>();
84+
dyn_cast<const TargetRegisterClass *>(RegClassOrBank);
8585
if (RC) {
8686
const LLT Ty = MRI.getType(Reg);
8787
if (!Ty.isValid() || Ty.getSizeInBits() != 1)
@@ -91,7 +91,7 @@ bool AMDGPUInstructionSelector::isVCC(Register Reg,
9191
RC->hasSuperClassEq(TRI.getBoolRC());
9292
}
9393

94-
const RegisterBank *RB = RegClassOrBank.get<const RegisterBank *>();
94+
const RegisterBank *RB = cast<const RegisterBank *>(RegClassOrBank);
9595
return RB->getID() == AMDGPU::VCCRegBankID;
9696
}
9797

@@ -233,15 +233,15 @@ bool AMDGPUInstructionSelector::selectPHI(MachineInstr &I) const {
233233
const RegClassOrRegBank &RegClassOrBank =
234234
MRI->getRegClassOrRegBank(DefReg);
235235

236-
const TargetRegisterClass *DefRC
237-
= RegClassOrBank.dyn_cast<const TargetRegisterClass *>();
236+
const TargetRegisterClass *DefRC =
237+
dyn_cast<const TargetRegisterClass *>(RegClassOrBank);
238238
if (!DefRC) {
239239
if (!DefTy.isValid()) {
240240
LLVM_DEBUG(dbgs() << "PHI operand has no type, not a gvreg?\n");
241241
return false;
242242
}
243243

244-
const RegisterBank &RB = *RegClassOrBank.get<const RegisterBank *>();
244+
const RegisterBank &RB = *cast<const RegisterBank *>(RegClassOrBank);
245245
DefRC = TRI.getRegClassForTypeOnBank(DefTy, RB);
246246
if (!DefRC) {
247247
LLVM_DEBUG(dbgs() << "PHI operand has unexpected size/bank\n");
@@ -2395,11 +2395,11 @@ const RegisterBank *AMDGPUInstructionSelector::getArtifactRegBank(
23952395
Register Reg, const MachineRegisterInfo &MRI,
23962396
const TargetRegisterInfo &TRI) const {
23972397
const RegClassOrRegBank &RegClassOrBank = MRI.getRegClassOrRegBank(Reg);
2398-
if (auto *RB = RegClassOrBank.dyn_cast<const RegisterBank *>())
2398+
if (auto *RB = dyn_cast<const RegisterBank *>(RegClassOrBank))
23992399
return RB;
24002400

24012401
// Ignore the type, since we don't use vcc in artifacts.
2402-
if (auto *RC = RegClassOrBank.dyn_cast<const TargetRegisterClass *>())
2402+
if (auto *RC = dyn_cast<const TargetRegisterClass *>(RegClassOrBank))
24032403
return &RBI.getRegBankFromRegClass(*RC, LLT());
24042404
return nullptr;
24052405
}

llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3837,10 +3837,10 @@ const TargetRegisterClass *
38373837
SIRegisterInfo::getConstrainedRegClassForOperand(const MachineOperand &MO,
38383838
const MachineRegisterInfo &MRI) const {
38393839
const RegClassOrRegBank &RCOrRB = MRI.getRegClassOrRegBank(MO.getReg());
3840-
if (const RegisterBank *RB = RCOrRB.dyn_cast<const RegisterBank*>())
3840+
if (const RegisterBank *RB = dyn_cast<const RegisterBank *>(RCOrRB))
38413841
return getRegClassForTypeOnBank(MRI.getType(MO.getReg()), *RB);
38423842

3843-
if (const auto *RC = RCOrRB.dyn_cast<const TargetRegisterClass *>())
3843+
if (const auto *RC = dyn_cast<const TargetRegisterClass *>(RCOrRB))
38443844
return getAllocatableClass(RC);
38453845

38463846
return nullptr;

llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ static uint32_t calcArraySize(const DICompositeType *CTy, uint32_t StartDim) {
303303
if (auto *Element = dyn_cast_or_null<DINode>(Elements[I]))
304304
if (Element->getTag() == dwarf::DW_TAG_subrange_type) {
305305
const DISubrange *SR = cast<DISubrange>(Element);
306-
auto *CI = SR->getCount().dyn_cast<ConstantInt *>();
306+
auto *CI = dyn_cast<ConstantInt *>(SR->getCount());
307307
DimSize *= CI->getSExtValue();
308308
}
309309
}

llvm/lib/Target/BPF/BTFDebug.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ void BTFDebug::visitArrayType(const DICompositeType *CTy, uint32_t &TypeId) {
715715
if (auto *Element = dyn_cast_or_null<DINode>(Elements[I]))
716716
if (Element->getTag() == dwarf::DW_TAG_subrange_type) {
717717
const DISubrange *SR = cast<DISubrange>(Element);
718-
auto *CI = SR->getCount().dyn_cast<ConstantInt *>();
718+
auto *CI = dyn_cast<ConstantInt *>(SR->getCount());
719719
int64_t Count = CI->getSExtValue();
720720

721721
// For struct s { int b; char c[]; }, the c[] will be represented

llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -598,14 +598,14 @@ bool RISCVInstructionSelector::select(MachineInstr &MI) {
598598
MRI->getRegClassOrRegBank(DefReg);
599599

600600
const TargetRegisterClass *DefRC =
601-
RegClassOrBank.dyn_cast<const TargetRegisterClass *>();
601+
dyn_cast<const TargetRegisterClass *>(RegClassOrBank);
602602
if (!DefRC) {
603603
if (!DefTy.isValid()) {
604604
LLVM_DEBUG(dbgs() << "PHI operand has no type, not a gvreg?\n");
605605
return false;
606606
}
607607

608-
const RegisterBank &RB = *RegClassOrBank.get<const RegisterBank *>();
608+
const RegisterBank &RB = *cast<const RegisterBank *>(RegClassOrBank);
609609
DefRC = getRegClassForTypeOnBank(DefTy, RB);
610610
if (!DefRC) {
611611
LLVM_DEBUG(dbgs() << "PHI operand has unexpected size/bank\n");

0 commit comments

Comments
 (0)