[clang][NFC] Inclusive terms: replace some uses of sanity in clang

Rewording of comments to avoid using `sanity test, sanity check`.

Reviewed By: aaron.ballman, Quuxplusone

Differential Revision: https://reviews.llvm.org/D114025
This commit is contained in:
Zarko Todorovski 2021-11-19 14:50:09 -05:00
parent e0f58444e1
commit d8e5a0c42b
25 changed files with 49 additions and 54 deletions

View File

@ -258,7 +258,8 @@ public:
redecl_iterator& operator++() { redecl_iterator& operator++() {
assert(Current && "Advancing while iterator has reached end"); assert(Current && "Advancing while iterator has reached end");
// Sanity check to avoid infinite loop on invalid redecl chain. // Make sure we don't infinitely loop on an invalid redecl chain. This
// should never happen.
if (Current->isFirstDecl()) { if (Current->isFirstDecl()) {
if (PassedFirst) { if (PassedFirst) {
assert(0 && "Passed first decl twice, invalid redecl chain!"); assert(0 && "Passed first decl twice, invalid redecl chain!");

View File

@ -515,7 +515,7 @@ public:
/// of the most derived class while we're in the base class. /// of the most derived class while we're in the base class.
VirtualBaseBranch, VirtualBaseBranch,
/// Number of different kinds, for sanity checks. We subtract 1 so that /// Number of different kinds, for validity checks. We subtract 1 so that
/// to keep receiving compiler warnings when we don't cover all enum values /// to keep receiving compiler warnings when we don't cover all enum values
/// in a switch. /// in a switch.
NumKindsMinusOne = VirtualBaseBranch NumKindsMinusOne = VirtualBaseBranch

View File

@ -250,7 +250,7 @@ public:
static ABIArgInfo getCoerceAndExpand(llvm::StructType *coerceToType, static ABIArgInfo getCoerceAndExpand(llvm::StructType *coerceToType,
llvm::Type *unpaddedCoerceToType) { llvm::Type *unpaddedCoerceToType) {
#ifndef NDEBUG #ifndef NDEBUG
// Sanity checks on unpaddedCoerceToType. // Check that unpaddedCoerceToType has roughly the right shape.
// Assert that we only have a struct type if there are multiple elements. // Assert that we only have a struct type if there are multiple elements.
auto unpaddedStruct = dyn_cast<llvm::StructType>(unpaddedCoerceToType); auto unpaddedStruct = dyn_cast<llvm::StructType>(unpaddedCoerceToType);

View File

@ -319,7 +319,7 @@ public:
} }
LookupResultKind getResultKind() const { LookupResultKind getResultKind() const {
assert(sanity()); assert(checkDebugAssumptions());
return ResultKind; return ResultKind;
} }
@ -706,10 +706,9 @@ private:
void addDeclsFromBasePaths(const CXXBasePaths &P); void addDeclsFromBasePaths(const CXXBasePaths &P);
void configure(); void configure();
// Sanity checks. bool checkDebugAssumptions() const;
bool sanity() const;
bool sanityCheckUnresolved() const { bool checkUnresolved() const {
for (iterator I = begin(), E = end(); I != E; ++I) for (iterator I = begin(), E = end(); I != E; ++I)
if (isa<UnresolvedUsingValueDecl>((*I)->getUnderlyingDecl())) if (isa<UnresolvedUsingValueDecl>((*I)->getUnderlyingDecl()))
return true; return true;

View File

@ -790,9 +790,8 @@ static Stmt *createObjCPropertyGetter(ASTContext &Ctx,
} }
} }
// Sanity check that the property is the same type as the ivar, or a // We expect that the property is the same type as the ivar, or a reference to
// reference to it, and that it is either an object pointer or trivially // it, and that it is either an object pointer or trivially copyable.
// copyable.
if (!Ctx.hasSameUnqualifiedType(IVar->getType(), if (!Ctx.hasSameUnqualifiedType(IVar->getType(),
Prop->getType().getNonReferenceType())) Prop->getType().getNonReferenceType()))
return nullptr; return nullptr;

View File

@ -791,7 +791,7 @@ RetainSummaryManager::getUnarySummary(const FunctionType* FT,
// Unary functions have no arg effects by definition. // Unary functions have no arg effects by definition.
ArgEffects ScratchArgs(AF.getEmptyMap()); ArgEffects ScratchArgs(AF.getEmptyMap());
// Sanity check that this is *really* a unary function. This can // Verify that this is *really* a unary function. This can
// happen if people do weird things. // happen if people do weird things.
const FunctionProtoType* FTP = dyn_cast<FunctionProtoType>(FT); const FunctionProtoType* FTP = dyn_cast<FunctionProtoType>(FT);
if (!FTP || FTP->getNumParams() != 1) if (!FTP || FTP->getNumParams() != 1)

View File

@ -692,7 +692,7 @@ void DiagnosticIDs::getAllDiagnostics(diag::Flavor Flavor,
StringRef DiagnosticIDs::getNearestOption(diag::Flavor Flavor, StringRef DiagnosticIDs::getNearestOption(diag::Flavor Flavor,
StringRef Group) { StringRef Group) {
StringRef Best; StringRef Best;
unsigned BestDistance = Group.size() + 1; // Sanity threshold. unsigned BestDistance = Group.size() + 1; // Maximum threshold.
for (const WarningOption &O : OptionTable) { for (const WarningOption &O : OptionTable) {
// Don't suggest ignored warning flags. // Don't suggest ignored warning flags.
if (!O.Members && !O.SubGroups) if (!O.Members && !O.SubGroups)

View File

@ -59,12 +59,10 @@ unsigned ContentCache::getSizeBytesMapped() const {
/// Returns the kind of memory used to back the memory buffer for /// Returns the kind of memory used to back the memory buffer for
/// this content cache. This is used for performance analysis. /// this content cache. This is used for performance analysis.
llvm::MemoryBuffer::BufferKind ContentCache::getMemoryBufferKind() const { llvm::MemoryBuffer::BufferKind ContentCache::getMemoryBufferKind() const {
assert(Buffer); if (Buffer == nullptr) {
assert(0 && "Buffer should never be null");
// Should be unreachable, but keep for sanity.
if (!Buffer)
return llvm::MemoryBuffer::MemoryBuffer_Malloc; return llvm::MemoryBuffer::MemoryBuffer_Malloc;
}
return Buffer->getBufferKind(); return Buffer->getBufferKind();
} }
@ -864,7 +862,6 @@ FileID SourceManager::getFileIDLocal(SourceLocation::UIntTy SLocOffset) const {
/// This function knows that the SourceLocation is in a loaded buffer, not a /// This function knows that the SourceLocation is in a loaded buffer, not a
/// local one. /// local one.
FileID SourceManager::getFileIDLoaded(SourceLocation::UIntTy SLocOffset) const { FileID SourceManager::getFileIDLoaded(SourceLocation::UIntTy SLocOffset) const {
// Sanity checking, otherwise a bug may lead to hanging in release build.
if (SLocOffset < CurrentLoadedOffset) { if (SLocOffset < CurrentLoadedOffset) {
assert(0 && "Invalid SLocOffset or bad function choice"); assert(0 && "Invalid SLocOffset or bad function choice");
return FileID(); return FileID();
@ -909,7 +906,6 @@ FileID SourceManager::getFileIDLoaded(SourceLocation::UIntTy SLocOffset) const {
++NumProbes; ++NumProbes;
if (E.getOffset() > SLocOffset) { if (E.getOffset() > SLocOffset) {
// Sanity checking, otherwise a bug may lead to hanging in release build.
if (GreaterIndex == MiddleIndex) { if (GreaterIndex == MiddleIndex) {
assert(0 && "binary search missed the entry"); assert(0 && "binary search missed the entry");
return FileID(); return FileID();
@ -925,7 +921,6 @@ FileID SourceManager::getFileIDLoaded(SourceLocation::UIntTy SLocOffset) const {
return Res; return Res;
} }
// Sanity checking, otherwise a bug may lead to hanging in release build.
if (LessIndex == MiddleIndex) { if (LessIndex == MiddleIndex) {
assert(0 && "binary search missed the entry"); assert(0 && "binary search missed the entry");
return FileID(); return FileID();

View File

@ -4303,7 +4303,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
const Driver &D = TC.getDriver(); const Driver &D = TC.getDriver();
ArgStringList CmdArgs; ArgStringList CmdArgs;
// Check number of inputs for sanity. We need at least one input.
assert(Inputs.size() >= 1 && "Must have at least one input."); assert(Inputs.size() >= 1 && "Must have at least one input.");
// CUDA/HIP compilation may have multiple inputs (source file + results of // CUDA/HIP compilation may have multiple inputs (source file + results of
// device-side compilations). OpenMP device jobs also take the host IR as a // device-side compilations). OpenMP device jobs also take the host IR as a

View File

@ -2579,7 +2579,7 @@ tooling::Replacements sortCppIncludes(const FormatStyle &Style, StringRef Code,
// doesn't have hidden dependencies // doesn't have hidden dependencies
// (http://llvm.org/docs/CodingStandards.html#include-style). // (http://llvm.org/docs/CodingStandards.html#include-style).
// //
// FIXME: Do some sanity checking, e.g. edit distance of the base name, to fix // FIXME: Do some validation, e.g. edit distance of the base name, to fix
// cases where the first #include is unlikely to be the main header. // cases where the first #include is unlikely to be the main header.
tooling::IncludeCategoryManager Categories(Style.IncludeStyle, FileName); tooling::IncludeCategoryManager Categories(Style.IncludeStyle, FileName);
bool FirstIncludeBlock = true; bool FirstIncludeBlock = true;

View File

@ -842,7 +842,7 @@ void PrintPreprocessedAction::ExecuteAction() {
const char *next = (cur != end) ? cur + 1 : end; const char *next = (cur != end) ? cur + 1 : end;
// Limit ourselves to only scanning 256 characters into the source // Limit ourselves to only scanning 256 characters into the source
// file. This is mostly a sanity check in case the file has no // file. This is mostly a check in case the file has no
// newlines whatsoever. // newlines whatsoever.
if (end - cur > 256) if (end - cur > 256)
end = cur + 256; end = cur + 256;

View File

@ -5532,8 +5532,8 @@ ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange,
// For an arithmetic operation, the implied arithmetic must be well-formed. // For an arithmetic operation, the implied arithmetic must be well-formed.
if (Form == Arithmetic) { if (Form == Arithmetic) {
// gcc does not enforce these rules for GNU atomics, but we do so for // GCC does not enforce these rules for GNU atomics, but we do, because if
// sanity. // we didn't it would be very confusing. FIXME: For whom? How so?
auto IsAllowedValueType = [&](QualType ValType) { auto IsAllowedValueType = [&](QualType ValType) {
if (ValType->isIntegerType()) if (ValType->isIntegerType())
return true; return true;
@ -5574,7 +5574,8 @@ ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange,
if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) && if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) &&
!AtomTy->isScalarType()) { !AtomTy->isScalarType()) {
// For GNU atomics, require a trivially-copyable type. This is not part of // For GNU atomics, require a trivially-copyable type. This is not part of
// the GNU atomics specification, but we enforce it for sanity. // the GNU atomics specification, but we enforce it, because if we didn't it
// would be very confusing. FIXME: For whom? How so?
Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_trivial_copy) Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_trivial_copy)
<< Ptr->getType() << Ptr->getSourceRange(); << Ptr->getType() << Ptr->getSourceRange();
return ExprError(); return ExprError();

View File

@ -12621,8 +12621,9 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {
} }
/// ActOnInitializerError - Given that there was an error parsing an /// ActOnInitializerError - Given that there was an error parsing an
/// initializer for the given declaration, try to return to some form /// initializer for the given declaration, try to at least re-establish
/// of sanity. /// invariants such as whether a variable's type is either dependent or
/// complete.
void Sema::ActOnInitializerError(Decl *D) { void Sema::ActOnInitializerError(Decl *D) {
// Our main concern here is re-establishing invariants like "a // Our main concern here is re-establishing invariants like "a
// variable's type is either dependent or complete". // variable's type is either dependent or complete".
@ -15997,8 +15998,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
// It's okay to have a tag decl in the same scope as a typedef // It's okay to have a tag decl in the same scope as a typedef
// which hides a tag decl in the same scope. Finding this // which hides a tag decl in the same scope. Finding this
// insanity with a redeclaration lookup can only actually happen // with a redeclaration lookup can only actually happen in C++.
// in C++.
// //
// This is also okay for elaborated-type-specifiers, which is // This is also okay for elaborated-type-specifiers, which is
// technically forbidden by the current standard but which is // technically forbidden by the current standard but which is

View File

@ -9172,7 +9172,8 @@ bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
} }
// Don't check the implicit member of the anonymous union type. // Don't check the implicit member of the anonymous union type.
// This is technically non-conformant, but sanity demands it. // This is technically non-conformant but supported, and we have a
// diagnostic for this elsewhere.
return false; return false;
} }
@ -12256,7 +12257,7 @@ NamedDecl *Sema::BuildUsingDeclaration(
// Unlike most lookups, we don't always want to hide tag // Unlike most lookups, we don't always want to hide tag
// declarations: tag names are visible through the using declaration // declarations: tag names are visible through the using declaration
// even if hidden by ordinary names, *except* in a dependent context // even if hidden by ordinary names, *except* in a dependent context
// where it's important for the sanity of two-phase lookup. // where they may be used by two-phase lookup.
if (!IsInstantiation) if (!IsInstantiation)
R.setHideTags(false); R.setHideTags(false);

View File

@ -11185,7 +11185,6 @@ QualType Sema::CheckShiftOperands(ExprResult &LHS, ExprResult &RHS,
isScopedEnumerationType(RHSType)) { isScopedEnumerationType(RHSType)) {
return InvalidOperands(Loc, LHS, RHS); return InvalidOperands(Loc, LHS, RHS);
} }
// Sanity-check shift operands
DiagnoseBadShiftValues(*this, LHS, RHS, Loc, Opc, LHSType); DiagnoseBadShiftValues(*this, LHS, RHS, Loc, Opc, LHSType);
// "The type of the result is that of the promoted left operand." // "The type of the result is that of the promoted left operand."

View File

@ -1507,8 +1507,9 @@ Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo,
ElemTy = Context.getBaseElementType(Ty); ElemTy = Context.getBaseElementType(Ty);
} }
// There doesn't seem to be an explicit rule against this but sanity demands // Only construct objects with object types.
// we only construct objects with object types. // There doesn't seem to be an explicit rule for this but functions are
// not objects, so they cannot take initializers.
if (Ty->isFunctionType()) if (Ty->isFunctionType())
return ExprError(Diag(TyBeginLoc, diag::err_init_for_function_type) return ExprError(Diag(TyBeginLoc, diag::err_init_for_function_type)
<< Ty << FullRange); << Ty << FullRange);

View File

@ -324,14 +324,14 @@ void LookupResult::configure() {
} }
} }
bool LookupResult::sanity() const { bool LookupResult::checkDebugAssumptions() const {
// This function is never called by NDEBUG builds. // This function is never called by NDEBUG builds.
assert(ResultKind != NotFound || Decls.size() == 0); assert(ResultKind != NotFound || Decls.size() == 0);
assert(ResultKind != Found || Decls.size() == 1); assert(ResultKind != Found || Decls.size() == 1);
assert(ResultKind != FoundOverloaded || Decls.size() > 1 || assert(ResultKind != FoundOverloaded || Decls.size() > 1 ||
(Decls.size() == 1 && (Decls.size() == 1 &&
isa<FunctionTemplateDecl>((*begin())->getUnderlyingDecl()))); isa<FunctionTemplateDecl>((*begin())->getUnderlyingDecl())));
assert(ResultKind != FoundUnresolvedValue || sanityCheckUnresolved()); assert(ResultKind != FoundUnresolvedValue || checkUnresolved());
assert(ResultKind != Ambiguous || Decls.size() > 1 || assert(ResultKind != Ambiguous || Decls.size() > 1 ||
(Decls.size() == 1 && (Ambiguity == AmbiguousBaseSubobjects || (Decls.size() == 1 && (Ambiguity == AmbiguousBaseSubobjects ||
Ambiguity == AmbiguousBaseSubobjectTypes))); Ambiguity == AmbiguousBaseSubobjectTypes)));

View File

@ -1517,7 +1517,7 @@ void CStringChecker::evalStrcat(CheckerContext &C, const CallExpr *CE) const {
} }
void CStringChecker::evalStrncat(CheckerContext &C, const CallExpr *CE) const { void CStringChecker::evalStrncat(CheckerContext &C, const CallExpr *CE) const {
//char *strncat(char *restrict s1, const char *restrict s2, size_t n); // char *strncat(char *restrict s1, const char *restrict s2, size_t n);
evalStrcpyCommon(C, CE, evalStrcpyCommon(C, CE,
/* ReturnEnd = */ false, /* ReturnEnd = */ false,
/* IsBounded = */ true, /* IsBounded = */ true,
@ -2069,8 +2069,8 @@ void CStringChecker::evalStrcmpCommon(CheckerContext &C, const CallExpr *CE,
} }
void CStringChecker::evalStrsep(CheckerContext &C, const CallExpr *CE) const { void CStringChecker::evalStrsep(CheckerContext &C, const CallExpr *CE) const {
//char *strsep(char **stringp, const char *delim); // char *strsep(char **stringp, const char *delim);
// Sanity: does the search string parameter match the return type? // Verify whether the search string parameter matches the return type.
SourceArgExpr SearchStrPtr = {CE->getArg(0), 0}; SourceArgExpr SearchStrPtr = {CE->getArg(0), 0};
QualType CharPtrTy = SearchStrPtr.Expression->getType()->getPointeeType(); QualType CharPtrTy = SearchStrPtr.Expression->getType()->getPointeeType();

View File

@ -160,7 +160,7 @@ static bool isInMIGCall(CheckerContext &C) {
if (Optional<AnyCall> AC = AnyCall::forDecl(D)) { if (Optional<AnyCall> AC = AnyCall::forDecl(D)) {
// Even though there's a Sema warning when the return type of an annotated // Even though there's a Sema warning when the return type of an annotated
// function is not a kern_return_t, this warning isn't an error, so we need // function is not a kern_return_t, this warning isn't an error, so we need
// an extra sanity check here. // an extra check here.
// FIXME: AnyCall doesn't support blocks yet, so they remain unchecked // FIXME: AnyCall doesn't support blocks yet, so they remain unchecked
// for now. // for now.
if (!AC->getReturnType(C.getASTContext()) if (!AC->getReturnType(C.getASTContext())

View File

@ -155,7 +155,7 @@ class StdLibraryFunctionsChecker
protected: protected:
ArgNo ArgN; // Argument to which we apply the constraint. ArgNo ArgN; // Argument to which we apply the constraint.
/// Do polymorphic sanity check on the constraint. /// Do polymorphic validation check on the constraint.
virtual bool checkSpecificValidity(const FunctionDecl *FD) const { virtual bool checkSpecificValidity(const FunctionDecl *FD) const {
return true; return true;
} }
@ -527,8 +527,8 @@ class StdLibraryFunctionsChecker
} }
private: private:
// Once we know the exact type of the function then do sanity check on all // Once we know the exact type of the function then do validation check on
// the given constraints. // all the given constraints.
bool validateByConstraints(const FunctionDecl *FD) const { bool validateByConstraints(const FunctionDecl *FD) const {
for (const ConstraintSet &Case : CaseConstraints) for (const ConstraintSet &Case : CaseConstraints)
for (const ValueConstraintPtr &Constraint : Case) for (const ValueConstraintPtr &Constraint : Case)

View File

@ -182,8 +182,7 @@ void UnixAPIMisuseChecker::CheckOpenVariant(CheckerContext &C,
ProgramStateRef state = C.getState(); ProgramStateRef state = C.getState();
if (CE->getNumArgs() < MinArgCount) { if (CE->getNumArgs() < MinArgCount) {
// The frontend should issue a warning for this case, so this is a sanity // The frontend should issue a warning for this case. Just return.
// check.
return; return;
} else if (CE->getNumArgs() == MaxArgCount) { } else if (CE->getNumArgs() == MaxArgCount) {
const Expr *Arg = CE->getArg(CreateModeArgIndex); const Expr *Arg = CE->getArg(CreateModeArgIndex);
@ -366,7 +365,7 @@ void UnixAPIPortabilityChecker::BasicAllocationCheck(CheckerContext &C,
const unsigned numArgs, const unsigned numArgs,
const unsigned sizeArg, const unsigned sizeArg,
const char *fn) const { const char *fn) const {
// Sanity check for the correct number of arguments // Check for the correct number of arguments.
if (CE->getNumArgs() != numArgs) if (CE->getNumArgs() != numArgs)
return; return;

View File

@ -1670,9 +1670,10 @@ PathDiagnosticPieceRef TrackConstraintBRVisitor::VisitNode(
if (isUnderconstrained(PrevN)) { if (isUnderconstrained(PrevN)) {
IsSatisfied = true; IsSatisfied = true;
// As a sanity check, make sure that the negation of the constraint // At this point, the negation of the constraint should be infeasible. If it
// was infeasible in the current state. If it is feasible, we somehow // is feasible, make sure that the negation of the constrainti was
// missed the transition point. // infeasible in the current state. If it is feasible, we somehow missed
// the transition point.
assert(!isUnderconstrained(N)); assert(!isUnderconstrained(N));
// We found the transition point for the constraint. We now need to // We found the transition point for the constraint. We now need to

View File

@ -326,8 +326,8 @@ ProgramStateRef ExprEngine::createTemporaryRegionIfNeeded(
} }
Result = InitWithAdjustments; Result = InitWithAdjustments;
} else { } else {
// We need to create a region no matter what. For sanity, make sure we don't // We need to create a region no matter what. Make sure we don't try to
// try to stuff a Loc into a non-pointer temporary region. // stuff a Loc into a non-pointer temporary region.
assert(!InitValWithAdjustments.getAs<Loc>() || assert(!InitValWithAdjustments.getAs<Loc>() ||
Loc::isLocType(Result->getType()) || Loc::isLocType(Result->getType()) ||
Result->getType()->isMemberPointerType()); Result->getType()->isMemberPointerType());

View File

@ -249,7 +249,7 @@ static bool regionMatchesCXXRecordType(SVal V, QualType Ty) {
} }
SVal StoreManager::evalDerivedToBase(SVal Derived, const CastExpr *Cast) { SVal StoreManager::evalDerivedToBase(SVal Derived, const CastExpr *Cast) {
// Sanity check to avoid doing the wrong thing in the face of // Early return to avoid doing the wrong thing in the face of
// reinterpret_cast. // reinterpret_cast.
if (!regionMatchesCXXRecordType(Derived, Cast->getSubExpr()->getType())) if (!regionMatchesCXXRecordType(Derived, Cast->getSubExpr()->getType()))
return UnknownVal(); return UnknownVal();

View File

@ -126,7 +126,7 @@ void syntax::Tree::replaceChildRangeLowLevel(Node *Begin, Node *End,
for (auto *N = New; N; N = N->NextSibling) { for (auto *N = New; N; N = N->NextSibling) {
assert(N->Parent == nullptr); assert(N->Parent == nullptr);
assert(N->getRole() != NodeRole::Detached && "Roles must be set"); assert(N->getRole() != NodeRole::Detached && "Roles must be set");
// FIXME: sanity-check the role. // FIXME: validate the role.
} }
auto Reachable = [](Node *From, Node *N) { auto Reachable = [](Node *From, Node *N) {