Skip to content

Commit 265623a

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:b120fe8d3288 into amd-gfx:225830a27ae5
Local branch amd-gfx 225830a Merged main:954af75cebbd into amd-gfx:57c86aa95bff Remote branch main b120fe8 [clang][NFC] Refactor `ArgPassingKind`
2 parents 225830a + b120fe8 commit 265623a

File tree

77 files changed

+761
-307
lines changed

Some content is hidden

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

77 files changed

+761
-307
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,8 @@ Floating Point Support in Clang
809809
- Add ``__builtin_exp10``, ``__builtin_exp10f``,
810810
``__builtin_exp10f16``, ``__builtin_exp10l`` and
811811
``__builtin_exp10f128`` builtins.
812+
- Add ``__builtin_iszero``, ``__builtin_issignaling`` and
813+
``__builtin_issubnormal``.
812814

813815
AST Matchers
814816
------------

clang/include/clang/AST/Decl.h

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4069,28 +4069,6 @@ class RecordDecl : public TagDecl {
40694069
public:
40704070
friend class DeclContext;
40714071
friend class ASTDeclReader;
4072-
/// Enum that represents the different ways arguments are passed to and
4073-
/// returned from function calls. This takes into account the target-specific
4074-
/// and version-specific rules along with the rules determined by the
4075-
/// language.
4076-
enum ArgPassingKind : unsigned {
4077-
/// The argument of this type can be passed directly in registers.
4078-
APK_CanPassInRegs,
4079-
4080-
/// The argument of this type cannot be passed directly in registers.
4081-
/// Records containing this type as a subobject are not forced to be passed
4082-
/// indirectly. This value is used only in C++. This value is required by
4083-
/// C++ because, in uncommon situations, it is possible for a class to have
4084-
/// only trivial copy/move constructors even when one of its subobjects has
4085-
/// a non-trivial copy/move constructor (if e.g. the corresponding copy/move
4086-
/// constructor in the derived class is deleted).
4087-
APK_CannotPassInRegs,
4088-
4089-
/// The argument of this type cannot be passed directly in registers.
4090-
/// Records containing this type as a subobject are forced to be passed
4091-
/// indirectly.
4092-
APK_CanNeverPassInRegs
4093-
};
40944072

40954073
protected:
40964074
RecordDecl(Kind DK, TagKind TK, const ASTContext &C, DeclContext *DC,
@@ -4215,15 +4193,15 @@ class RecordDecl : public TagDecl {
42154193
/// it must have at least one trivial, non-deleted copy or move constructor.
42164194
/// FIXME: This should be set as part of completeDefinition.
42174195
bool canPassInRegisters() const {
4218-
return getArgPassingRestrictions() == APK_CanPassInRegs;
4196+
return getArgPassingRestrictions() == ArgPassingKind::CanPassInRegs;
42194197
}
42204198

42214199
ArgPassingKind getArgPassingRestrictions() const {
42224200
return static_cast<ArgPassingKind>(RecordDeclBits.ArgPassingRestrictions);
42234201
}
42244202

42254203
void setArgPassingRestrictions(ArgPassingKind Kind) {
4226-
RecordDeclBits.ArgPassingRestrictions = Kind;
4204+
RecordDeclBits.ArgPassingRestrictions = llvm::to_underlying(Kind);
42274205
}
42284206

42294207
bool isParamDestroyedInCallee() const {

clang/include/clang/AST/DeclBase.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,29 @@ enum class DeductionCandidate : unsigned char {
13991399
Aggregate,
14001400
};
14011401

1402+
/// Enum that represents the different ways arguments are passed to and
1403+
/// returned from function calls. This takes into account the target-specific
1404+
/// and version-specific rules along with the rules determined by the
1405+
/// language.
1406+
enum class ArgPassingKind {
1407+
/// The argument of this type can be passed directly in registers.
1408+
CanPassInRegs,
1409+
1410+
/// The argument of this type cannot be passed directly in registers.
1411+
/// Records containing this type as a subobject are not forced to be passed
1412+
/// indirectly. This value is used only in C++. This value is required by
1413+
/// C++ because, in uncommon situations, it is possible for a class to have
1414+
/// only trivial copy/move constructors even when one of its subobjects has
1415+
/// a non-trivial copy/move constructor (if e.g. the corresponding copy/move
1416+
/// constructor in the derived class is deleted).
1417+
CannotPassInRegs,
1418+
1419+
/// The argument of this type cannot be passed directly in registers.
1420+
/// Records containing this type as a subobject are forced to be passed
1421+
/// indirectly.
1422+
CanNeverPassInRegs
1423+
};
1424+
14021425
/// DeclContext - This is used only as base class of specific decl types that
14031426
/// can act as declaration contexts. These decls are (only the top classes
14041427
/// that directly derive from DeclContext are mentioned, not their subclasses):

clang/include/clang/Basic/Builtins.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,9 @@ BUILTIN(__builtin_isinf, "i.", "FnctE")
494494
BUILTIN(__builtin_isinf_sign, "i.", "FnctE")
495495
BUILTIN(__builtin_isnan, "i.", "FnctE")
496496
BUILTIN(__builtin_isnormal, "i.", "FnctE")
497+
BUILTIN(__builtin_issubnormal,"i.", "FnctE")
498+
BUILTIN(__builtin_iszero, "i.", "FnctE")
499+
BUILTIN(__builtin_issignaling,"i.", "FnctE")
497500
BUILTIN(__builtin_isfpclass, "i.", "nctE")
498501

499502
// FP signbit builtins

clang/lib/AST/Decl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4932,7 +4932,7 @@ RecordDecl::RecordDecl(Kind DK, TagKind TK, const ASTContext &C,
49324932
setHasNonTrivialToPrimitiveDestructCUnion(false);
49334933
setHasNonTrivialToPrimitiveCopyCUnion(false);
49344934
setParamDestroyedInCallee(false);
4935-
setArgPassingRestrictions(APK_CanPassInRegs);
4935+
setArgPassingRestrictions(ArgPassingKind::CanPassInRegs);
49364936
setIsRandomized(false);
49374937
setODRHash(0);
49384938
}

clang/lib/AST/DeclCXX.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,8 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,
446446
setHasVolatileMember(true);
447447

448448
if (BaseClassDecl->getArgPassingRestrictions() ==
449-
RecordDecl::APK_CanNeverPassInRegs)
450-
setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
449+
ArgPassingKind::CanNeverPassInRegs)
450+
setArgPassingRestrictions(ArgPassingKind::CanNeverPassInRegs);
451451

452452
// Keep track of the presence of mutable fields.
453453
if (BaseClassDecl->hasMutableFields())
@@ -1032,7 +1032,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
10321032

10331033
// Structs with __weak fields should never be passed directly.
10341034
if (LT == Qualifiers::OCL_Weak)
1035-
setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
1035+
setArgPassingRestrictions(ArgPassingKind::CanNeverPassInRegs);
10361036

10371037
Data.HasIrrelevantDestructor = false;
10381038

@@ -1226,8 +1226,8 @@ void CXXRecordDecl::addedMember(Decl *D) {
12261226
if (FieldRec->hasVolatileMember())
12271227
setHasVolatileMember(true);
12281228
if (FieldRec->getArgPassingRestrictions() ==
1229-
RecordDecl::APK_CanNeverPassInRegs)
1230-
setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
1229+
ArgPassingKind::CanNeverPassInRegs)
1230+
setArgPassingRestrictions(ArgPassingKind::CanNeverPassInRegs);
12311231

12321232
// C++0x [class]p7:
12331233
// A standard-layout class is a class that:

clang/lib/AST/ExprConstant.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12398,6 +12398,24 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1239812398
Success(Val.isNormal() ? 1 : 0, E);
1239912399
}
1240012400

12401+
case Builtin::BI__builtin_issubnormal: {
12402+
APFloat Val(0.0);
12403+
return EvaluateFloat(E->getArg(0), Val, Info) &&
12404+
Success(Val.isDenormal() ? 1 : 0, E);
12405+
}
12406+
12407+
case Builtin::BI__builtin_iszero: {
12408+
APFloat Val(0.0);
12409+
return EvaluateFloat(E->getArg(0), Val, Info) &&
12410+
Success(Val.isZero() ? 1 : 0, E);
12411+
}
12412+
12413+
case Builtin::BI__builtin_issignaling: {
12414+
APFloat Val(0.0);
12415+
return EvaluateFloat(E->getArg(0), Val, Info) &&
12416+
Success(Val.isSignaling() ? 1 : 0, E);
12417+
}
12418+
1240112419
case Builtin::BI__builtin_isfpclass: {
1240212420
APSInt MaskVal;
1240312421
if (!EvaluateInteger(E->getArg(1), MaskVal, Info))

clang/lib/AST/Interp/Floating.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class Floating final {
9393
bool isMin() const { return F.isSmallest(); }
9494
bool isMinusOne() const { return F.isExactlyValue(-1.0); }
9595
bool isNan() const { return F.isNaN(); }
96+
bool isSignaling() const { return F.isSignaling(); }
9697
bool isInf() const { return F.isInfinity(); }
9798
bool isFinite() const { return F.isFinite(); }
9899
bool isNormal() const { return F.isNormal(); }

clang/lib/AST/Interp/InterpBuiltin.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,15 @@ static bool interp__builtin_isnan(InterpState &S, CodePtr OpPC,
306306
return true;
307307
}
308308

309+
static bool interp__builtin_issignaling(InterpState &S, CodePtr OpPC,
310+
const InterpFrame *Frame,
311+
const Function *F) {
312+
const Floating &Arg = S.Stk.peek<Floating>();
313+
314+
pushInt(S, Arg.isSignaling());
315+
return true;
316+
}
317+
309318
static bool interp__builtin_isinf(InterpState &S, CodePtr OpPC,
310319
const InterpFrame *Frame, const Function *F,
311320
bool CheckSign) {
@@ -337,6 +346,24 @@ static bool interp__builtin_isnormal(InterpState &S, CodePtr OpPC,
337346
return true;
338347
}
339348

349+
static bool interp__builtin_issubnormal(InterpState &S, CodePtr OpPC,
350+
const InterpFrame *Frame,
351+
const Function *F) {
352+
const Floating &Arg = S.Stk.peek<Floating>();
353+
354+
pushInt(S, Arg.isDenormal());
355+
return true;
356+
}
357+
358+
static bool interp__builtin_iszero(InterpState &S, CodePtr OpPC,
359+
const InterpFrame *Frame,
360+
const Function *F) {
361+
const Floating &Arg = S.Stk.peek<Floating>();
362+
363+
pushInt(S, Arg.isZero());
364+
return true;
365+
}
366+
340367
/// First parameter to __builtin_isfpclass is the floating value, the
341368
/// second one is an integral value.
342369
static bool interp__builtin_isfpclass(InterpState &S, CodePtr OpPC,
@@ -491,6 +518,10 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const Function *F,
491518
if (interp__builtin_isnan(S, OpPC, Frame, F))
492519
return retInt(S, OpPC, Dummy);
493520
break;
521+
case Builtin::BI__builtin_issignaling:
522+
if (interp__builtin_issignaling(S, OpPC, Frame, F))
523+
return retInt(S, OpPC, Dummy);
524+
break;
494525

495526
case Builtin::BI__builtin_isinf:
496527
if (interp__builtin_isinf(S, OpPC, Frame, F, /*Sign=*/false))
@@ -510,6 +541,14 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const Function *F,
510541
if (interp__builtin_isnormal(S, OpPC, Frame, F))
511542
return retInt(S, OpPC, Dummy);
512543
break;
544+
case Builtin::BI__builtin_issubnormal:
545+
if (interp__builtin_issubnormal(S, OpPC, Frame, F))
546+
return retInt(S, OpPC, Dummy);
547+
break;
548+
case Builtin::BI__builtin_iszero:
549+
if (interp__builtin_iszero(S, OpPC, Frame, F))
550+
return retInt(S, OpPC, Dummy);
551+
break;
513552
case Builtin::BI__builtin_isfpclass:
514553
if (interp__builtin_isfpclass(S, OpPC, Frame, F, Call))
515554
return retInt(S, OpPC, Dummy);

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3356,6 +3356,14 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
33563356
ConvertType(E->getType())));
33573357
}
33583358

3359+
case Builtin::BI__builtin_issignaling: {
3360+
CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E);
3361+
Value *V = EmitScalarExpr(E->getArg(0));
3362+
return RValue::get(
3363+
Builder.CreateZExt(Builder.createIsFPClass(V, FPClassTest::fcSNan),
3364+
ConvertType(E->getType())));
3365+
}
3366+
33593367
case Builtin::BI__builtin_isinf: {
33603368
CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E);
33613369
Value *V = EmitScalarExpr(E->getArg(0));
@@ -3390,6 +3398,22 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
33903398
ConvertType(E->getType())));
33913399
}
33923400

3401+
case Builtin::BI__builtin_issubnormal: {
3402+
CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E);
3403+
Value *V = EmitScalarExpr(E->getArg(0));
3404+
return RValue::get(
3405+
Builder.CreateZExt(Builder.createIsFPClass(V, FPClassTest::fcSubnormal),
3406+
ConvertType(E->getType())));
3407+
}
3408+
3409+
case Builtin::BI__builtin_iszero: {
3410+
CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E);
3411+
Value *V = EmitScalarExpr(E->getArg(0));
3412+
return RValue::get(
3413+
Builder.CreateZExt(Builder.createIsFPClass(V, FPClassTest::fcZero),
3414+
ConvertType(E->getType())));
3415+
}
3416+
33933417
case Builtin::BI__builtin_isfpclass: {
33943418
Expr::EvalResult Result;
33953419
if (!E->getArg(1)->EvaluateAsInt(Result, CGM.getContext()))

clang/lib/CodeGen/CGCall.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2719,7 +2719,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name,
27192719

27202720
auto *Decl = ParamType->getAsRecordDecl();
27212721
if (CodeGenOpts.PassByValueIsNoAlias && Decl &&
2722-
Decl->getArgPassingRestrictions() == RecordDecl::APK_CanPassInRegs)
2722+
Decl->getArgPassingRestrictions() == ArgPassingKind::CanPassInRegs)
27232723
// When calling the function, the pointer passed in will be the only
27242724
// reference to the underlying object. Mark it accordingly.
27252725
Attrs.addAttribute(llvm::Attribute::NoAlias);

clang/lib/Driver/ToolChains/DragonFly.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ void dragonfly::Linker::ConstructJob(Compilation &C, const JobAction &JA,
144144
CmdArgs.push_back("-lm");
145145
}
146146

147+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
148+
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
149+
147150
// Additional linker set-up and flags for Fortran. This is required in order
148151
// to generate executables. As Fortran runtime depends on the C runtime,
149152
// these dependencies need to be listed before the C runtime below (i.e.

clang/lib/Driver/ToolChains/FreeBSD.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
291291
CmdArgs.push_back("-lm");
292292
}
293293

294+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
295+
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
296+
294297
// Additional linker set-up and flags for Fortran. This is required in order
295298
// to generate executables. As Fortran runtime depends on the C runtime,
296299
// these dependencies need to be listed before the C runtime below (i.e.
@@ -364,9 +367,6 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
364367

365368
ToolChain.addProfileRTLibs(Args, CmdArgs);
366369

367-
// Silence warnings when linking C code with a C++ '-stdlib' argument.
368-
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
369-
370370
const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
371371
C.addCommand(std::make_unique<Command>(JA, *this,
372372
ResponseFileSupport::AtFileCurCP(),

clang/lib/Driver/ToolChains/Haiku.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA,
9595
if (D.CCCIsCXX() && ToolChain.ShouldLinkCXXStdlib(Args))
9696
ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);
9797

98+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
99+
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
100+
98101
// Additional linker set-up and flags for Fortran. This is required in order
99102
// to generate executables. As Fortran runtime depends on the C runtime,
100103
// these dependencies need to be listed before the C runtime below (i.e.

clang/lib/Driver/ToolChains/NetBSD.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,9 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
315315
CmdArgs.push_back("-lm");
316316
}
317317

318+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
319+
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
320+
318321
// Additional linker set-up and flags for Fortran. This is required in order
319322
// to generate executables. As Fortran runtime depends on the C runtime,
320323
// these dependencies need to be listed before the C runtime below (i.e.

clang/lib/Driver/ToolChains/OpenBSD.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
214214
CmdArgs.push_back("-lm");
215215
}
216216

217+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
218+
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
219+
217220
// Additional linker set-up and flags for Fortran. This is required in order
218221
// to generate executables. As Fortran runtime depends on the C runtime,
219222
// these dependencies need to be listed before the C runtime below (i.e.

clang/lib/Driver/ToolChains/Solaris.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,8 @@ void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA,
220220
getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
221221
CmdArgs.push_back("-lm");
222222
}
223+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
224+
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
223225
// Additional linker set-up and flags for Fortran. This is required in order
224226
// to generate executables. As Fortran runtime depends on the C runtime,
225227
// these dependencies need to be listed before the C runtime below.

clang/lib/Sema/SemaChecking.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2255,7 +2255,10 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
22552255
case Builtin::BI__builtin_isinf:
22562256
case Builtin::BI__builtin_isinf_sign:
22572257
case Builtin::BI__builtin_isnan:
2258+
case Builtin::BI__builtin_issignaling:
22582259
case Builtin::BI__builtin_isnormal:
2260+
case Builtin::BI__builtin_issubnormal:
2261+
case Builtin::BI__builtin_iszero:
22592262
case Builtin::BI__builtin_signbit:
22602263
case Builtin::BI__builtin_signbitf:
22612264
case Builtin::BI__builtin_signbitl:

clang/lib/Sema/SemaDecl.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19197,10 +19197,10 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl,
1919719197

1919819198
if (const auto *RT = FT->getAs<RecordType>()) {
1919919199
if (RT->getDecl()->getArgPassingRestrictions() ==
19200-
RecordDecl::APK_CanNeverPassInRegs)
19201-
Record->setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
19200+
ArgPassingKind::CanNeverPassInRegs)
19201+
Record->setArgPassingRestrictions(ArgPassingKind::CanNeverPassInRegs);
1920219202
} else if (FT.getQualifiers().getObjCLifetime() == Qualifiers::OCL_Weak)
19203-
Record->setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
19203+
Record->setArgPassingRestrictions(ArgPassingKind::CanNeverPassInRegs);
1920419204
}
1920519205

1920619206
if (Record && FD->getType().isVolatileQualified())

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7280,11 +7280,11 @@ void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {
72807280
bool CanPass = canPassInRegisters(*this, Record, CCK);
72817281

72827282
// Do not change ArgPassingRestrictions if it has already been set to
7283-
// APK_CanNeverPassInRegs.
7284-
if (Record->getArgPassingRestrictions() != RecordDecl::APK_CanNeverPassInRegs)
7283+
// ArgPassingKind::CanNeverPassInRegs.
7284+
if (Record->getArgPassingRestrictions() != ArgPassingKind::CanNeverPassInRegs)
72857285
Record->setArgPassingRestrictions(CanPass
7286-
? RecordDecl::APK_CanPassInRegs
7287-
: RecordDecl::APK_CannotPassInRegs);
7286+
? ArgPassingKind::CanPassInRegs
7287+
: ArgPassingKind::CannotPassInRegs);
72887288

72897289
// If canPassInRegisters returns true despite the record having a non-trivial
72907290
// destructor, the record is destructed in the callee. This happens only when

0 commit comments

Comments
 (0)