From 94ff8e1f57c6382d91d0de981a4f311509d83e37 Mon Sep 17 00:00:00 2001
From: Sylvestre Ledru <sylvestre@debian.org>
Date: Thu, 27 Sep 2012 09:57:10 +0000
Subject: [PATCH] Fix a typo 'iff' => 'if'

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164766 91177308-0d34-0410-b5e6-96231b3b80d8
---
 INPUTS/c99-intconst-1.c                                 | 2 +-
 include/clang/AST/ASTContext.h                          | 2 +-
 include/clang/AST/DeclObjC.h                            | 2 +-
 include/clang/Analysis/AnalysisContext.h                | 2 +-
 include/clang/Basic/Diagnostic.h                        | 2 +-
 include/clang/Sema/Sema.h                               | 4 ++--
 lib/CodeGen/CGBuiltin.cpp                               | 6 +++---
 lib/CodeGen/CGDecl.cpp                                  | 2 +-
 lib/CodeGen/CGObjCMac.cpp                               | 4 ++--
 lib/CodeGen/CGRTTI.cpp                                  | 4 ++--
 lib/CodeGen/CGVTables.h                                 | 2 +-
 lib/CodeGen/CodeGenFunction.h                           | 4 ++--
 lib/CodeGen/CodeGenModule.h                             | 8 ++++----
 lib/CodeGen/CodeGenTBAA.cpp                             | 2 +-
 lib/CodeGen/TargetInfo.cpp                              | 6 +++---
 lib/Driver/Option.cpp                                   | 4 ++--
 lib/Frontend/TextDiagnostic.cpp                         | 2 +-
 lib/Sema/AnalysisBasedWarnings.cpp                      | 8 ++++----
 lib/Sema/SemaAccess.cpp                                 | 2 +-
 lib/Sema/SemaChecking.cpp                               | 2 +-
 lib/Sema/SemaDecl.cpp                                   | 4 ++--
 lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp | 4 ++--
 test/SemaCXX/discrim-union.cpp                          | 2 +-
 23 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/INPUTS/c99-intconst-1.c b/INPUTS/c99-intconst-1.c
index 629b0bcac20..3b6bb6c75fc 100644
--- a/INPUTS/c99-intconst-1.c
+++ b/INPUTS/c99-intconst-1.c
@@ -160,7 +160,7 @@
 	CHECK_OCTHEX_CONST(0x##C);		\
 	CHECK_OCTHEX_CONST(0X##C);
 
-/* True iff "long long" is at least B bits.  This presumes that (B-2)/3 is at
+/* True if "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	\
diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h
index eeaba7a71da..27a910f9acd 100644
--- a/include/clang/AST/ASTContext.h
+++ b/include/clang/AST/ASTContext.h
@@ -840,7 +840,7 @@ public:
   /// Builds the struct used for __block variables.
   QualType BuildByRefType(StringRef DeclName, QualType Ty) const;
 
-  /// Returns true iff we need copy/dispose helpers for the given type.
+  /// Returns true if 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
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index 9e0130ad165..c815babcd41 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -1821,7 +1821,7 @@ public:
 
   // Helper methods for accessing attributes.
 
-  /// isReadOnly - Return true iff the property has a setter.
+  /// isReadOnly - Return true if the property has a setter.
   bool isReadOnly() const {
     return (PropertyAttributes & OBJC_PR_readonly);
   }
diff --git a/include/clang/Analysis/AnalysisContext.h b/include/clang/Analysis/AnalysisContext.h
index 02b85304dbd..639550f850e 100644
--- a/include/clang/Analysis/AnalysisContext.h
+++ b/include/clang/Analysis/AnalysisContext.h
@@ -119,7 +119,7 @@ public:
     return cfgBuildOptions;
   }
 
-  /// getAddEHEdges - Return true iff we are adding exceptional edges from
+  /// getAddEHEdges - Return true if 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.
diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h
index b596937061e..abc5733ee16 100644
--- a/include/clang/Basic/Diagnostic.h
+++ b/include/clang/Basic/Diagnostic.h
@@ -831,7 +831,7 @@ class DiagnosticBuilder {
 
   /// \brief Status variable indicating if this diagnostic is still active.
   ///
-  // NOTE: This field is redundant with DiagObj (IsActive iff (DiagObj == 0)),
+  // NOTE: This field is redundant with DiagObj (IsActive if (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;
diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h
index 97d425ceaea..c1f0923c34f 100644
--- a/include/clang/Sema/Sema.h
+++ b/include/clang/Sema/Sema.h
@@ -6824,7 +6824,7 @@ public:
   /// 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 iff there were any incompatible types.
+  /// \return true if there were any incompatible types.
   bool CheckMessageArgumentTypes(QualType ReceiverType,
                                  Expr **Args, unsigned NumArgs, Selector Sel,
                                  ArrayRef<SourceLocation> SelectorLocs,
@@ -6851,7 +6851,7 @@ public:
   ///
   /// \param Loc - A location associated with the condition, e.g. the
   /// 'if' keyword.
-  /// \return true iff there were any errors
+  /// \return true if there were any errors
   ExprResult CheckBooleanCondition(Expr *E, SourceLocation Loc);
 
   ExprResult ActOnBooleanCondition(Scope *S, SourceLocation Loc,
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp
index 7a0abd71a68..4a3b3e9794e 100644
--- a/lib/CodeGen/CGBuiltin.cpp
+++ b/lib/CodeGen/CGBuiltin.cpp
@@ -597,7 +597,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
   }
 
   case Builtin::BI__builtin___memcpy_chk: {
-    // fold __builtin_memcpy_chk(x, y, cst1, cst2) to memcpy iff cst1<=cst2.
+    // fold __builtin_memcpy_chk(x, y, cst1, cst2) to memcpy if cst1<=cst2.
     llvm::APSInt Size, DstSize;
     if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
         !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
@@ -624,7 +624,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
   }
 
   case Builtin::BI__builtin___memmove_chk: {
-    // fold __builtin_memmove_chk(x, y, cst1, cst2) to memmove iff cst1<=cst2.
+    // fold __builtin_memmove_chk(x, y, cst1, cst2) to memmove if cst1<=cst2.
     llvm::APSInt Size, DstSize;
     if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
         !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
@@ -663,7 +663,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
     return RValue::get(Dest.first);
   }
   case Builtin::BI__builtin___memset_chk: {
-    // fold __builtin_memset_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
+    // fold __builtin_memset_chk(x, y, cst1, cst2) to memset if cst1<=cst2.
     llvm::APSInt Size, DstSize;
     if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
         !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp
index b9489e3f040..88a252a697d 100644
--- a/lib/CodeGen/CGDecl.cpp
+++ b/lib/CodeGen/CGDecl.cpp
@@ -1179,7 +1179,7 @@ void CodeGenFunction::emitAutoVarTypeCleanup(
   // If we haven't chosen a more specific destroyer, use the default.
   if (!destroyer) destroyer = getDestroyer(dtorKind);
 
-  // Use an EH cleanup in array destructors iff the destructor itself
+  // Use an EH cleanup in array destructors if the destructor itself
   // is being pushed as an EH cleanup.
   bool useEHCleanup = (cleanupKind & EHCleanup);
   EHStack.pushCleanup<DestroyObject>(cleanupKind, addr, type, destroyer,
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 08e706c82e7..e9aa3b74acc 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -1028,8 +1028,8 @@ private:
   /// EmitMethodDescList - Emit a method description list for a list of
   /// method declarations.
   ///  - TypeName: The name for the type containing the methods.
-  ///  - IsProtocol: True iff these methods are for a protocol.
-  ///  - ClassMethds: True iff these are class methods.
+  ///  - IsProtocol: True if these methods are for a protocol.
+  ///  - ClassMethds: True if 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.
diff --git a/lib/CodeGen/CGRTTI.cpp b/lib/CodeGen/CGRTTI.cpp
index e46423b95ae..ee1a7701eec 100644
--- a/lib/CodeGen/CGRTTI.cpp
+++ b/lib/CodeGen/CGRTTI.cpp
@@ -347,7 +347,7 @@ getTypeInfoLinkage(CodeGenModule &CGM, QualType Ty) {
 
 // CanUseSingleInheritance - Return whether the given record decl has a "single, 
 // public, non-virtual base at offset zero (i.e. the derived class is dynamic 
-// iff the base is)", according to Itanium C++ ABI, 2.95p6b.
+// if 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)
@@ -364,7 +364,7 @@ static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
   if (Base->getAccessSpecifier() != AS_public)
     return false;
   
-  // Check that the class is dynamic iff the base is.
+  // Check that the class is dynamic if the base is.
   const CXXRecordDecl *BaseDecl = 
     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   if (!BaseDecl->isEmpty() && 
diff --git a/lib/CodeGen/CGVTables.h b/lib/CodeGen/CGVTables.h
index 828330e5e3c..f5b59c819d7 100644
--- a/lib/CodeGen/CGVTables.h
+++ b/lib/CodeGen/CGVTables.h
@@ -58,7 +58,7 @@ class CodeGenVTables {
 
   /// MaybeEmitThunkAvailableExternally - Try to emit the given thunk with
   /// available_externally linkage to allow for inlining of thunks.
-  /// This will be done iff optimizations are enabled and the member function
+  /// This will be done if optimizations are enabled and the member function
   /// doesn't contain any incomplete types.
   void MaybeEmitThunkAvailableExternally(GlobalDecl GD, const ThunkInfo &Thunk);
 
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index fc930ec158b..a31a64e6cc1 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -583,7 +583,7 @@ public:
   JumpDest ReturnBlock;
 
   /// ReturnValue - The temporary alloca to hold the return value. This is null
-  /// iff the function has no return value.
+  /// if the function has no return value.
   llvm::Value *ReturnValue;
 
   /// AllocaInsertPoint - This is an instruction in the entry block before which
@@ -1655,7 +1655,7 @@ public:
 
   /// EmitAggregateCopy - Emit an aggrate copy.
   ///
-  /// \param isVolatile - True iff either the source or the destination is
+  /// \param isVolatile - True if either the source or the destination is
   /// volatile.
   void EmitAggregateCopy(llvm::Value *DestPtr, llvm::Value *SrcPtr,
                          QualType EltTy, bool isVolatile=false,
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index 6e81693f7fd..0e15e7b3a6f 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -372,7 +372,7 @@ public:
     return *ObjCRuntime;
   }
 
-  /// hasObjCRuntime() - Return true iff an Objective-C runtime has
+  /// hasObjCRuntime() - Return true if an Objective-C runtime has
   /// been configured.
   bool hasObjCRuntime() { return !!ObjCRuntime; }
 
@@ -788,15 +788,15 @@ public:
   /// which only apply to a function definintion.
   void SetLLVMFunctionAttributesForDefinition(const Decl *D, llvm::Function *F);
 
-  /// ReturnTypeUsesSRet - Return true iff the given type uses 'sret' when used
+  /// ReturnTypeUsesSRet - Return true if the given type uses 'sret' when used
   /// as a return type.
   bool ReturnTypeUsesSRet(const CGFunctionInfo &FI);
 
-  /// ReturnTypeUsesFPRet - Return true iff the given type uses 'fpret' when
+  /// ReturnTypeUsesFPRet - Return true if the given type uses 'fpret' when
   /// used as a return type.
   bool ReturnTypeUsesFPRet(QualType ResultType);
 
-  /// ReturnTypeUsesFP2Ret - Return true iff the given type uses 'fp2ret' when
+  /// ReturnTypeUsesFP2Ret - Return true if the given type uses 'fp2ret' when
   /// used as a return type.
   bool ReturnTypeUsesFP2Ret(QualType ResultType);
 
diff --git a/lib/CodeGen/CodeGenTBAA.cpp b/lib/CodeGen/CodeGenTBAA.cpp
index bab60afbb7f..3d5725db68c 100644
--- a/lib/CodeGen/CodeGenTBAA.cpp
+++ b/lib/CodeGen/CodeGenTBAA.cpp
@@ -135,7 +135,7 @@ CodeGenTBAA::getTBAAInfo(QualType QTy) {
   // 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 iff their members
+    // In C mode, two anonymous enums are compatible if 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.
diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp
index 419ce022e55..15ccfd50fc8 100644
--- a/lib/CodeGen/TargetInfo.cpp
+++ b/lib/CodeGen/TargetInfo.cpp
@@ -109,7 +109,7 @@ bool TargetCodeGenInfo::isNoProtoCallVariadic(const CallArgList &args,
 
 static bool isEmptyRecord(ASTContext &Context, QualType T, bool AllowArrays);
 
-/// isEmptyField - Return true iff a the field is "empty", that is it
+/// isEmptyField - Return true if 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) {
@@ -141,7 +141,7 @@ static bool isEmptyField(ASTContext &Context, const FieldDecl *FD,
   return isEmptyRecord(Context, FT, AllowArrays);
 }
 
-/// isEmptyRecord - Return true iff a structure contains only empty
+/// isEmptyRecord - Return true if 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) {
@@ -1070,7 +1070,7 @@ class X86_64ABIInfo : public ABIInfo {
   /// be passed in Memory then at least the classification of \arg Lo
   /// will be Memory.
   ///
-  /// The \arg Lo class will be NoClass iff the argument is ignored.
+  /// The \arg Lo class will be NoClass if the argument is ignored.
   ///
   /// If the \arg Lo class is ComplexX87, then the \arg Hi class will
   /// also be ComplexX87.
diff --git a/lib/Driver/Option.cpp b/lib/Driver/Option.cpp
index 3be141e61da..6a3418fa178 100644
--- a/lib/Driver/Option.cpp
+++ b/lib/Driver/Option.cpp
@@ -120,7 +120,7 @@ Arg *Option::accept(const ArgList &Args, unsigned &Index) const {
     return A;
   }
   case SeparateClass:
-    // Matches iff this is an exact match.
+    // Matches if this is an exact match.
     // FIXME: Avoid strlen.
     if (getName().size() != strlen(Args.getArgString(Index)))
       return 0;
@@ -132,7 +132,7 @@ Arg *Option::accept(const ArgList &Args, unsigned &Index) const {
     return new Arg(getUnaliasedOption(),
                    Index - 2, Args.getArgString(Index - 1));
   case MultiArgClass: {
-    // Matches iff this is an exact match.
+    // Matches if this is an exact match.
     // FIXME: Avoid strlen.
     if (getName().size() != strlen(Args.getArgString(Index)))
       return 0;
diff --git a/lib/Frontend/TextDiagnostic.cpp b/lib/Frontend/TextDiagnostic.cpp
index a8a5613eaac..d872e426913 100644
--- a/lib/Frontend/TextDiagnostic.cpp
+++ b/lib/Frontend/TextDiagnostic.cpp
@@ -88,7 +88,7 @@ static int bytesSincePreviousTabOrLineBegin(StringRef SourceLine, size_t i) {
 /// \param SourceLine The line of source
 /// \param i Pointer to byte index,
 /// \param TabStop used to expand tabs
-/// \return pair(printable text, 'true' iff original text was printable)
+/// \return pair(printable text, 'true' if original text was printable)
 ///
 static std::pair<SmallString<16>, bool>
 printableTextForNextCharacter(StringRef SourceLine, size_t *i,
diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp
index a3aee9afe08..2b7d4becd90 100644
--- a/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/lib/Sema/AnalysisBasedWarnings.cpp
@@ -87,10 +87,10 @@ enum ControlFlowKind {
 /// CheckFallThrough - Check that we don't fall off the end of a
 /// Statement that should return a value.
 ///
-/// \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
+/// \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
 /// statement but we may return.  We assume that functions not marked noreturn
 /// will return.
 static ControlFlowKind CheckFallThrough(AnalysisDeclContext &AC) {
diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp
index 58b1a51ae57..ddb5e4e3674 100644
--- a/lib/Sema/SemaAccess.cpp
+++ b/lib/Sema/SemaAccess.cpp
@@ -918,7 +918,7 @@ static AccessResult HasAccess(Sema &S,
 ///     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 iff ACAB(1) = public.
+/// B is an accessible base of N at R if ACAB(1) = public.
 ///
 /// \param FinalAccess the access of the "final step", or AS_public if
 ///   there is no final step.
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 7951a71e4ed..0fa87483ba0 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/lib/Sema/SemaChecking.cpp
@@ -5366,7 +5366,7 @@ namespace {
 /// 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 iff the variable has __strong
+  // In ARC, it's captured strongly if 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)
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 01aaf8be323..17db68ed593 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -4799,7 +4799,7 @@ class DifferentNameValidatorCCC : public CorrectionCandidateCallback {
 /// or performing typo correction if there are no previous declarations with
 /// the same name.
 ///
-/// Returns a NamedDecl iff typo correction was performed and substituting in
+/// Returns a NamedDecl if 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,
@@ -8237,7 +8237,7 @@ static unsigned getRedeclDiagFromTagKind(TagTypeKind Tag) {
 /// \brief Determine if tag kind is a class-key compatible with
 /// class for redeclaration (class, struct, or __interface).
 ///
-/// \returns true iff the tag kind is compatible.
+/// \returns true if the tag kind is compatible.
 static bool isClassCompatTagKind(TagTypeKind Tag)
 {
   return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface;
diff --git a/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp b/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
index 21db9e67c14..b4a2210e3d8 100644
--- a/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
+++ b/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
@@ -240,8 +240,8 @@ static SymbolRef getAsPointeeSymbol(const Expr *Expr,
 // 1) noErr / [0]
 // 2) someErr / [1, inf]
 // 3) unknown
-// If noError, returns true iff (1).
-// If !noError, returns true iff (2).
+// If noError, returns true if (1).
+// If !noError, returns true if (2).
 bool MacOSKeychainAPIChecker::definitelyReturnedError(SymbolRef RetSym,
                                                       ProgramStateRef State,
                                                       SValBuilder &Builder,
diff --git a/test/SemaCXX/discrim-union.cpp b/test/SemaCXX/discrim-union.cpp
index 15c9a225ed9..43629f316b2 100644
--- a/test/SemaCXX/discrim-union.cpp
+++ b/test/SemaCXX/discrim-union.cpp
@@ -76,7 +76,7 @@ public:
     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 iff any element has a nontrivial destructor
+  // FIXME: declare a destructor if any element has a nontrivial destructor
   //~either() { impl.destroy(elem); }
 
   constexpr unsigned index() noexcept { return elem; }
-- 
GitLab