CHECK_OCTHEX_CONST(0x##C); \
CHECK_OCTHEX_CONST(0X##C);
-/* True if "long long" is at least B bits. This presumes that (B-2)/3 is at
+/* True iff "long long" is at least B bits. This presumes that (B-2)/3 is at
most 63. */
#define LLONG_AT_LEAST(B) \
(LLONG_MAX >> ((B)-2)/3 >> ((B)-2)/3 \
/// Builds the struct used for __block variables.
QualType BuildByRefType(StringRef DeclName, QualType Ty) const;
- /// Returns true if we need copy/dispose helpers for the given type.
+ /// Returns true iff we need copy/dispose helpers for the given type.
bool BlockRequiresCopying(QualType Ty) const;
/// \brief Return the uniqued reference to the type for an lvalue reference
// Helper methods for accessing attributes.
- /// isReadOnly - Return true if the property has a setter.
+ /// isReadOnly - Return true iff the property has a setter.
bool isReadOnly() const {
return (PropertyAttributes & OBJC_PR_readonly);
}
return cfgBuildOptions;
}
- /// getAddEHEdges - Return true if we are adding exceptional edges from
+ /// getAddEHEdges - Return true iff we are adding exceptional edges from
/// callExprs. If this is false, then try/catch statements and blocks
/// reachable from them can appear to be dead in the CFG, analysis passes must
/// cope with that.
/// \brief Status variable indicating if this diagnostic is still active.
///
- // NOTE: This field is redundant with DiagObj (IsActive if (DiagObj == 0)),
+ // NOTE: This field is redundant with DiagObj (IsActive iff (DiagObj == 0)),
// but LLVM is not currently smart enough to eliminate the null check that
// Emit() would end up with if we used that as our status variable.
mutable bool IsActive;
/// CheckMessageArgumentTypes - Check types in an Obj-C message send.
/// \param Method - May be null.
/// \param [out] ReturnType - The return type of the send.
- /// \return true if there were any incompatible types.
+ /// \return true iff there were any incompatible types.
bool CheckMessageArgumentTypes(QualType ReceiverType,
Expr **Args, unsigned NumArgs, Selector Sel,
ArrayRef<SourceLocation> SelectorLocs,
///
/// \param Loc - A location associated with the condition, e.g. the
/// 'if' keyword.
- /// \return true if there were any errors
+ /// \return true iff there were any errors
ExprResult CheckBooleanCondition(Expr *E, SourceLocation Loc);
ExprResult ActOnBooleanCondition(Scope *S, SourceLocation Loc,
}
case Builtin::BI__builtin___memcpy_chk: {
- // fold __builtin_memcpy_chk(x, y, cst1, cst2) to memcpy if cst1<=cst2.
+ // fold __builtin_memcpy_chk(x, y, cst1, cst2) to memcpy iff cst1<=cst2.
llvm::APSInt Size, DstSize;
if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
!E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
}
case Builtin::BI__builtin___memmove_chk: {
- // fold __builtin_memmove_chk(x, y, cst1, cst2) to memmove if cst1<=cst2.
+ // fold __builtin_memmove_chk(x, y, cst1, cst2) to memmove iff cst1<=cst2.
llvm::APSInt Size, DstSize;
if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
!E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
return RValue::get(Dest.first);
}
case Builtin::BI__builtin___memset_chk: {
- // fold __builtin_memset_chk(x, y, cst1, cst2) to memset if cst1<=cst2.
+ // fold __builtin_memset_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
llvm::APSInt Size, DstSize;
if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
!E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
// If we haven't chosen a more specific destroyer, use the default.
if (!destroyer) destroyer = getDestroyer(dtorKind);
- // Use an EH cleanup in array destructors if the destructor itself
+ // Use an EH cleanup in array destructors iff the destructor itself
// is being pushed as an EH cleanup.
bool useEHCleanup = (cleanupKind & EHCleanup);
EHStack.pushCleanup<DestroyObject>(cleanupKind, addr, type, destroyer,
/// EmitMethodDescList - Emit a method description list for a list of
/// method declarations.
/// - TypeName: The name for the type containing the methods.
- /// - IsProtocol: True if these methods are for a protocol.
- /// - ClassMethds: True if these are class methods.
+ /// - IsProtocol: True iff these methods are for a protocol.
+ /// - ClassMethds: True iff these are class methods.
/// - Required: When true, only "required" methods are
/// listed. Similarly, when false only "optional" methods are
/// listed. For classes this should always be true.
// CanUseSingleInheritance - Return whether the given record decl has a "single,
// public, non-virtual base at offset zero (i.e. the derived class is dynamic
-// if the base is)", according to Itanium C++ ABI, 2.95p6b.
+// iff the base is)", according to Itanium C++ ABI, 2.95p6b.
static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
// Check the number of bases.
if (RD->getNumBases() != 1)
if (Base->getAccessSpecifier() != AS_public)
return false;
- // Check that the class is dynamic if the base is.
+ // Check that the class is dynamic iff the base is.
const CXXRecordDecl *BaseDecl =
cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
if (!BaseDecl->isEmpty() &&
/// MaybeEmitThunkAvailableExternally - Try to emit the given thunk with
/// available_externally linkage to allow for inlining of thunks.
- /// This will be done if optimizations are enabled and the member function
+ /// This will be done iff optimizations are enabled and the member function
/// doesn't contain any incomplete types.
void MaybeEmitThunkAvailableExternally(GlobalDecl GD, const ThunkInfo &Thunk);
JumpDest ReturnBlock;
/// ReturnValue - The temporary alloca to hold the return value. This is null
- /// if the function has no return value.
+ /// iff the function has no return value.
llvm::Value *ReturnValue;
/// AllocaInsertPoint - This is an instruction in the entry block before which
/// EmitAggregateCopy - Emit an aggrate copy.
///
- /// \param isVolatile - True if either the source or the destination is
+ /// \param isVolatile - True iff either the source or the destination is
/// volatile.
void EmitAggregateCopy(llvm::Value *DestPtr, llvm::Value *SrcPtr,
QualType EltTy, bool isVolatile=false,
return *ObjCRuntime;
}
- /// hasObjCRuntime() - Return true if an Objective-C runtime has
+ /// hasObjCRuntime() - Return true iff an Objective-C runtime has
/// been configured.
bool hasObjCRuntime() { return !!ObjCRuntime; }
/// which only apply to a function definintion.
void SetLLVMFunctionAttributesForDefinition(const Decl *D, llvm::Function *F);
- /// ReturnTypeUsesSRet - Return true if the given type uses 'sret' when used
+ /// ReturnTypeUsesSRet - Return true iff the given type uses 'sret' when used
/// as a return type.
bool ReturnTypeUsesSRet(const CGFunctionInfo &FI);
- /// ReturnTypeUsesFPRet - Return true if the given type uses 'fpret' when
+ /// ReturnTypeUsesFPRet - Return true iff the given type uses 'fpret' when
/// used as a return type.
bool ReturnTypeUsesFPRet(QualType ResultType);
- /// ReturnTypeUsesFP2Ret - Return true if the given type uses 'fp2ret' when
+ /// ReturnTypeUsesFP2Ret - Return true iff the given type uses 'fp2ret' when
/// used as a return type.
bool ReturnTypeUsesFP2Ret(QualType ResultType);
// Enum types are distinct types. In C++ they have "underlying types",
// however they aren't related for TBAA.
if (const EnumType *ETy = dyn_cast<EnumType>(Ty)) {
- // In C mode, two anonymous enums are compatible if their members
+ // In C mode, two anonymous enums are compatible iff their members
// are the same -- see C99 6.2.7p1. For now, be conservative. We could
// theoretically implement this by combining information about all the
// members into a single identifying MDNode.
static bool isEmptyRecord(ASTContext &Context, QualType T, bool AllowArrays);
-/// isEmptyField - Return true if a the field is "empty", that is it
+/// isEmptyField - Return true iff a the field is "empty", that is it
/// is an unnamed bit-field or an (array of) empty record(s).
static bool isEmptyField(ASTContext &Context, const FieldDecl *FD,
bool AllowArrays) {
return isEmptyRecord(Context, FT, AllowArrays);
}
-/// isEmptyRecord - Return true if a structure contains only empty
+/// isEmptyRecord - Return true iff a structure contains only empty
/// fields. Note that a structure with a flexible array member is not
/// considered empty.
static bool isEmptyRecord(ASTContext &Context, QualType T, bool AllowArrays) {
/// be passed in Memory then at least the classification of \arg Lo
/// will be Memory.
///
- /// The \arg Lo class will be NoClass if the argument is ignored.
+ /// The \arg Lo class will be NoClass iff the argument is ignored.
///
/// If the \arg Lo class is ComplexX87, then the \arg Hi class will
/// also be ComplexX87.
return A;
}
case SeparateClass:
- // Matches if this is an exact match.
+ // Matches iff this is an exact match.
// FIXME: Avoid strlen.
if (getName().size() != strlen(Args.getArgString(Index)))
return 0;
return new Arg(getUnaliasedOption(),
Index - 2, Args.getArgString(Index - 1));
case MultiArgClass: {
- // Matches if this is an exact match.
+ // Matches iff this is an exact match.
// FIXME: Avoid strlen.
if (getName().size() != strlen(Args.getArgString(Index)))
return 0;
/// \param SourceLine The line of source
/// \param i Pointer to byte index,
/// \param TabStop used to expand tabs
-/// \return pair(printable text, 'true' if original text was printable)
+/// \return pair(printable text, 'true' iff original text was printable)
///
static std::pair<SmallString<16>, bool>
printableTextForNextCharacter(StringRef SourceLine, size_t *i,
/// CheckFallThrough - Check that we don't fall off the end of a
/// Statement that should return a value.
///
-/// \returns AlwaysFallThrough if we always fall off the end of the statement,
-/// MaybeFallThrough if we might or might not fall off the end,
-/// NeverFallThroughOrReturn if we never fall off the end of the statement or
-/// return. We assume NeverFallThrough if we never fall off the end of the
+/// \returns AlwaysFallThrough iff we always fall off the end of the statement,
+/// MaybeFallThrough iff we might or might not fall off the end,
+/// NeverFallThroughOrReturn iff we never fall off the end of the statement or
+/// return. We assume NeverFallThrough iff we never fall off the end of the
/// statement but we may return. We assume that functions not marked noreturn
/// will return.
static ControlFlowKind CheckFallThrough(AnalysisDeclContext &AC) {
/// let AccessToBase = Merge(Access(B_i, B_{i+1}), ACAB(i+1)) in
/// if Accessible(B_i, AccessToBase) then public else AccessToBase
///
-/// B is an accessible base of N at R if ACAB(1) = public.
+/// B is an accessible base of N at R iff ACAB(1) = public.
///
/// \param FinalAccess the access of the "final step", or AS_public if
/// there is no final step.
/// Consider whether capturing the given variable can possibly lead to
/// a retain cycle.
static bool considerVariable(VarDecl *var, Expr *ref, RetainCycleOwner &owner) {
- // In ARC, it's captured strongly if the variable has __strong
+ // In ARC, it's captured strongly iff the variable has __strong
// lifetime. In MRR, it's captured strongly if the variable is
// __block and has an appropriate type.
if (var->getType().getObjCLifetime() != Qualifiers::OCL_Strong)
/// or performing typo correction if there are no previous declarations with
/// the same name.
///
-/// Returns a NamedDecl if typo correction was performed and substituting in
+/// Returns a NamedDecl iff typo correction was performed and substituting in
/// the new declaration name does not cause new errors.
static NamedDecl* DiagnoseInvalidRedeclaration(
Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD,
/// \brief Determine if tag kind is a class-key compatible with
/// class for redeclaration (class, struct, or __interface).
///
-/// \returns true if the tag kind is compatible.
+/// \returns true iff the tag kind is compatible.
static bool isClassCompatTagKind(TagTypeKind Tag)
{
return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface;
// 1) noErr / [0]
// 2) someErr / [1, inf]
// 3) unknown
-// If noError, returns true if (1).
-// If !noError, returns true if (2).
+// If noError, returns true iff (1).
+// If !noError, returns true iff (2).
bool MacOSKeychainAPIChecker::definitelyReturnedError(SymbolRef RetSym,
ProgramStateRef State,
SValBuilder &Builder,
impl(detail::select<impl_t::index(detail::type<U>())>(), move(t.value)) {}
// Destruction disabled to allow use in a constant expression.
- // FIXME: declare a destructor if any element has a nontrivial destructor
+ // FIXME: declare a destructor iff any element has a nontrivial destructor
//~either() { impl.destroy(elem); }
constexpr unsigned index() noexcept { return elem; }