diff --git a/clang/include/clang/AST/JSONNodeDumper.h b/clang/include/clang/AST/JSONNodeDumper.h --- a/clang/include/clang/AST/JSONNodeDumper.h +++ b/clang/include/clang/AST/JSONNodeDumper.h @@ -380,7 +380,7 @@ case TSK_ExplicitInstantiationDefinition: if (!DumpExplicitInst) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case TSK_Undeclared: case TSK_ImplicitInstantiation: if (DumpRefOnly) diff --git a/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp b/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp --- a/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp +++ b/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp @@ -78,7 +78,7 @@ } } // Pass through. - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMF_retain: case OMF_release: if (E->getReceiverKind() == ObjCMessageExpr::Instance) diff --git a/clang/lib/ARCMigrate/TransformActions.cpp b/clang/lib/ARCMigrate/TransformActions.cpp --- a/clang/lib/ARCMigrate/TransformActions.cpp +++ b/clang/lib/ARCMigrate/TransformActions.cpp @@ -540,7 +540,7 @@ return; case Range_Contains: RI->End = newRange.End; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Range_ExtendsBegin: newRange.End = RI->End; Removals.erase(RI); diff --git a/clang/lib/AST/APValue.cpp b/clang/lib/AST/APValue.cpp --- a/clang/lib/AST/APValue.cpp +++ b/clang/lib/AST/APValue.cpp @@ -871,7 +871,7 @@ Out << "...}"; return; } - LLVM_FALLTHROUGH; + [[fallthrough]]; default: getArrayInitializedElt(I).printPretty(Out, Policy, ElemTy, Ctx); } diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -4420,7 +4420,7 @@ case EST_Unparsed: case EST_Unevaluated: case EST_Uninstantiated: // We don't know yet. It shouldn't matter what we pick here; no-one // should ever look at this. - LLVM_FALLTHROUGH; + [[fallthrough]]; case EST_None: case EST_MSAny: case EST_NoexceptFalse: CanonicalEPI.ExceptionSpec.Type = EST_None; break; @@ -8286,7 +8286,7 @@ return; } // TODO: Double check to make sure this intentionally falls through. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case Type::ObjCInterface: { diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp --- a/clang/lib/AST/ASTDiagnostic.cpp +++ b/clang/lib/AST/ASTDiagnostic.cpp @@ -425,7 +425,7 @@ Modifier = StringRef(); Argument = StringRef(); // Fall through - LLVM_FALLTHROUGH; + [[fallthrough]]; } case DiagnosticsEngine::ak_qualtype: { assert(Modifier.empty() && Argument.empty() && diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp --- a/clang/lib/AST/ASTDumper.cpp +++ b/clang/lib/AST/ASTDumper.cpp @@ -96,7 +96,7 @@ case TSK_ExplicitInstantiationDefinition: if (!DumpExplicitInst) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case TSK_Undeclared: case TSK_ImplicitInstantiation: if (DumpRefOnly) diff --git a/clang/lib/AST/ASTStructuralEquivalence.cpp b/clang/lib/AST/ASTStructuralEquivalence.cpp --- a/clang/lib/AST/ASTStructuralEquivalence.cpp +++ b/clang/lib/AST/ASTStructuralEquivalence.cpp @@ -900,7 +900,7 @@ return false; // Fall through to check the bits common with FunctionNoProtoType. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case Type::FunctionNoProto: { diff --git a/clang/lib/AST/Comment.cpp b/clang/lib/AST/Comment.cpp --- a/clang/lib/AST/Comment.cpp +++ b/clang/lib/AST/Comment.cpp @@ -301,7 +301,7 @@ TemplateKind = TemplateSpecialization; TemplateParameters = VTD->getTemplateParameters(); } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Decl::Field: case Decl::EnumConstant: case Decl::ObjCIvar: diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -277,7 +277,7 @@ case APValue::Int: if (!Value.getInt().needsCleanup()) return ConstantExpr::RSK_Int64; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return ConstantExpr::RSK_APValue; } @@ -2633,7 +2633,7 @@ } // Fallthrough for generic call handling. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case CallExprClass: case CXXMemberCallExprClass: @@ -3609,7 +3609,7 @@ DCE->getCastKind() == CK_Dynamic) return true; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case ImplicitCastExprClass: case CStyleCastExprClass: case CXXStaticCastExprClass: diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -1097,7 +1097,7 @@ switch (Kind) { case LCK_StarThis: Bits |= Capture_ByCopy; - LLVM_FALLTHROUGH; + [[fallthrough]]; case LCK_This: assert(!Var && "'this' capture cannot have a variable!"); Bits |= Capture_This; @@ -1105,7 +1105,7 @@ case LCK_ByCopy: Bits |= Capture_ByCopy; - LLVM_FALLTHROUGH; + [[fallthrough]]; case LCK_ByRef: assert(Var && "capture must have a variable!"); break; diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -1132,7 +1132,7 @@ if (!HasFoldFailureDiagnostic) break; // We've already failed to fold something. Keep that diagnostic. - LLVM_FALLTHROUGH; + [[fallthrough]]; case EM_ConstantExpression: case EM_ConstantExpressionUnevaluated: setActiveDiagnostic(false); @@ -9217,7 +9217,7 @@ << (std::string("'") + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + "'"); else Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BI__builtin_strchr: case Builtin::BI__builtin_wcschr: case Builtin::BI__builtin_memchr: @@ -9278,7 +9278,7 @@ Desired)) return ZeroInitialization(E); StopAtNull = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BImemchr: case Builtin::BI__builtin_memchr: case Builtin::BI__builtin_char_memchr: @@ -9291,7 +9291,7 @@ case Builtin::BIwcschr: case Builtin::BI__builtin_wcschr: StopAtNull = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BIwmemchr: case Builtin::BI__builtin_wmemchr: // wcschr and wmemchr are given a wchar_t to look for. Just use it. @@ -9325,7 +9325,7 @@ << (std::string("'") + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + "'"); else Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BI__builtin_memcpy: case Builtin::BI__builtin_memmove: case Builtin::BI__builtin_wmemcpy: @@ -12122,7 +12122,7 @@ << (std::string("'") + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + "'"); else Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BI__builtin_strlen: case Builtin::BI__builtin_wcslen: { // As an extension, we support __builtin_strlen() as a constant expression, @@ -12147,7 +12147,7 @@ << (std::string("'") + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + "'"); else Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BI__builtin_strcmp: case Builtin::BI__builtin_wcscmp: case Builtin::BI__builtin_strncmp: diff --git a/clang/lib/AST/FormatString.cpp b/clang/lib/AST/FormatString.cpp --- a/clang/lib/AST/FormatString.cpp +++ b/clang/lib/AST/FormatString.cpp @@ -747,7 +747,7 @@ break; } } - LLVM_FALLTHROUGH; + [[fallthrough]]; case LengthModifier::AsChar: case LengthModifier::AsLongLong: case LengthModifier::AsQuad: diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -1659,7 +1659,7 @@ if (!MD->isStatic()) Arity++; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclarationName::CXXConversionFunctionName: case DeclarationName::CXXLiteralOperatorName: mangleOperatorName(Name, Arity); @@ -4671,7 +4671,7 @@ Out << 'E'; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case UETT_AlignOf: Out << 'a'; MangleAlignofSizeofArg(); diff --git a/clang/lib/AST/NestedNameSpecifier.cpp b/clang/lib/AST/NestedNameSpecifier.cpp --- a/clang/lib/AST/NestedNameSpecifier.cpp +++ b/clang/lib/AST/NestedNameSpecifier.cpp @@ -280,7 +280,7 @@ case TypeSpecWithTemplate: OS << "template "; // Fall through to print the type. - LLVM_FALLTHROUGH; + [[fallthrough]]; case TypeSpec: { const auto *Record = diff --git a/clang/lib/AST/PrintfFormatString.cpp b/clang/lib/AST/PrintfFormatString.cpp --- a/clang/lib/AST/PrintfFormatString.cpp +++ b/clang/lib/AST/PrintfFormatString.cpp @@ -500,7 +500,7 @@ case LengthModifier::AsShort: if (Ctx.getTargetInfo().getTriple().isOSMSVCRT()) return Ctx.IntTy; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return ArgType::Invalid(); } diff --git a/clang/lib/AST/ScanfFormatString.cpp b/clang/lib/AST/ScanfFormatString.cpp --- a/clang/lib/AST/ScanfFormatString.cpp +++ b/clang/lib/AST/ScanfFormatString.cpp @@ -345,7 +345,7 @@ case LengthModifier::AsShort: if (Ctx.getTargetInfo().getTriple().isOSMSVCRT()) return ArgType::PtrTo(ArgType::AnyCharTy); - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return ArgType::Invalid(); } @@ -362,7 +362,7 @@ case LengthModifier::AsShort: if (Ctx.getTargetInfo().getTriple().isOSMSVCRT()) return ArgType::PtrTo(ArgType::AnyCharTy); - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return ArgType::Invalid(); } diff --git a/clang/lib/AST/TypeLoc.cpp b/clang/lib/AST/TypeLoc.cpp --- a/clang/lib/AST/TypeLoc.cpp +++ b/clang/lib/AST/TypeLoc.cpp @@ -208,7 +208,7 @@ LeftMost = Cur; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case FunctionNoProto: case ConstantArray: case DependentSizedArray: @@ -260,7 +260,7 @@ // `id` and `id<...>` have no star location. if (Cur.castAs().getStarLoc().isInvalid()) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Pointer: case BlockPointer: case MemberPointer: diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -262,7 +262,7 @@ case Type::VariableArray: case Type::DependentSizedArray: NeedARCStrongQualifier = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Type::ConstantArray: case Type::IncompleteArray: diff --git a/clang/lib/Analysis/CalledOnceCheck.cpp b/clang/lib/Analysis/CalledOnceCheck.cpp --- a/clang/lib/Analysis/CalledOnceCheck.cpp +++ b/clang/lib/Analysis/CalledOnceCheck.cpp @@ -319,7 +319,7 @@ // We care about logical not only if we care about comparisons. if (!ShouldRetrieveFromComparisons) return nullptr; - LLVM_FALLTHROUGH; + [[fallthrough]]; // Function pointer/references can be dereferenced before a call. // That doesn't make it, however, any different from a regular call. // For this reason, dereference operation is a "no-op". diff --git a/clang/lib/Analysis/ReachableCode.cpp b/clang/lib/Analysis/ReachableCode.cpp --- a/clang/lib/Analysis/ReachableCode.cpp +++ b/clang/lib/Analysis/ReachableCode.cpp @@ -218,7 +218,7 @@ return isConfigurationValue(cast(S)->getDecl(), PP); case Stmt::ObjCBoolLiteralExprClass: IgnoreYES_NO = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Stmt::CXXBoolLiteralExprClass: case Stmt::IntegerLiteralClass: { const Expr *E = cast(S); diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -2013,7 +2013,7 @@ case OO_LessLessEqual: case OO_GreaterGreaterEqual: checkAccess(OE->getArg(1), AK_Read); - LLVM_FALLTHROUGH; + [[fallthrough]]; case OO_PlusPlus: case OO_MinusMinus: checkAccess(OE->getArg(0), AK_Written); @@ -2026,7 +2026,7 @@ // Grrr. operator* can be multiplication... checkPtAccess(OE->getArg(0), AK_Read); } - LLVM_FALLTHROUGH; + [[fallthrough]]; default: { // TODO: get rid of this, and rely on pass-by-ref instead. const Expr *Obj = OE->getArg(0); diff --git a/clang/lib/Basic/BuiltinTargetFeatures.h b/clang/lib/Basic/BuiltinTargetFeatures.h --- a/clang/lib/Basic/BuiltinTargetFeatures.h +++ b/clang/lib/Basic/BuiltinTargetFeatures.h @@ -54,7 +54,7 @@ case ')': --InParentheses; assert(InParentheses >= 0 && "Parentheses are not in pair"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case '|': case ',': if (InParentheses == 0) { diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp --- a/clang/lib/Basic/TargetInfo.cpp +++ b/clang/lib/Basic/TargetInfo.cpp @@ -208,11 +208,11 @@ case UnsignedChar: if (getCharWidth() < getIntWidth()) return ""; - LLVM_FALLTHROUGH; + [[fallthrough]]; case UnsignedShort: if (getShortWidth() < getIntWidth()) return ""; - LLVM_FALLTHROUGH; + [[fallthrough]]; case UnsignedInt: return "U"; case UnsignedLong: return "UL"; case UnsignedLongLong: return "ULL"; diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp --- a/clang/lib/Basic/Targets/AMDGPU.cpp +++ b/clang/lib/Basic/Targets/AMDGPU.cpp @@ -234,7 +234,7 @@ Features["dot5-insts"] = true; Features["dot6-insts"] = true; Features["dot7-insts"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX1013: case GK_GFX1010: Features["dl-insts"] = true; @@ -251,30 +251,30 @@ case GK_GFX940: Features["gfx940-insts"] = true; Features["fp8-insts"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX90A: Features["gfx90a-insts"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX908: Features["dot3-insts"] = true; Features["dot4-insts"] = true; Features["dot5-insts"] = true; Features["dot6-insts"] = true; Features["mai-insts"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX906: Features["dl-insts"] = true; Features["dot1-insts"] = true; Features["dot2-insts"] = true; Features["dot7-insts"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX90C: case GK_GFX909: case GK_GFX904: case GK_GFX902: case GK_GFX900: Features["gfx9-insts"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX810: case GK_GFX805: case GK_GFX803: @@ -284,7 +284,7 @@ Features["16-bit-insts"] = true; Features["dpp"] = true; Features["s-memrealtime"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX705: case GK_GFX704: case GK_GFX703: @@ -293,7 +293,7 @@ case GK_GFX700: Features["ci-insts"] = true; Features["flat-address-space"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case GK_GFX602: case GK_GFX601: case GK_GFX600: diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -477,7 +477,7 @@ case llvm::Triple::x86: case llvm::Triple::x86_64: this->HasFloat128 = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: this->MCountName = "__mcount"; break; diff --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h --- a/clang/lib/Basic/Targets/PPC.h +++ b/clang/lib/Basic/Targets/PPC.h @@ -216,7 +216,7 @@ // Don't use floating point registers on soft float ABI. if (FloatABI == SoftFloat) return false; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'b': // Base register Info.setAllowsRegister(); break; @@ -295,7 +295,7 @@ case 'Q': // Memory operand that is an offset from a register (it is // usually better to use `m' or `es' in asm statements) Info.setAllowsRegister(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'Z': // Memory operand that is an indexed or indirect from a // register (it is usually better to use `m' or `es' in // asm statements) diff --git a/clang/lib/Basic/Targets/SystemZ.cpp b/clang/lib/Basic/Targets/SystemZ.cpp --- a/clang/lib/Basic/Targets/SystemZ.cpp +++ b/clang/lib/Basic/Targets/SystemZ.cpp @@ -69,7 +69,7 @@ case 'T': // Likewise, plus an index break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'a': // Address register case 'd': // Data register (equivalent to 'r') case 'f': // Floating-point register diff --git a/clang/lib/Basic/Targets/WebAssembly.cpp b/clang/lib/Basic/Targets/WebAssembly.cpp --- a/clang/lib/Basic/Targets/WebAssembly.cpp +++ b/clang/lib/Basic/Targets/WebAssembly.cpp @@ -104,10 +104,10 @@ switch (Level) { case RelaxedSIMD: Features["relaxed-simd"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case SIMD128: Features["simd128"] = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NoSIMD: break; } @@ -118,7 +118,7 @@ case NoSIMD: case SIMD128: Features["simd128"] = false; - LLVM_FALLTHROUGH; + [[fallthrough]]; case RelaxedSIMD: Features["relaxed-simd"] = false; break; diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -444,7 +444,7 @@ case CK_PentiumMMX: Builder.defineMacro("__pentium_mmx__"); Builder.defineMacro("__tune_pentium_mmx__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case CK_i586: case CK_Pentium: defineCPUMacros(Builder, "i586"); @@ -453,11 +453,11 @@ case CK_Pentium3: case CK_PentiumM: Builder.defineMacro("__tune_pentium3__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case CK_Pentium2: case CK_C3_2: Builder.defineMacro("__tune_pentium2__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case CK_PentiumPro: case CK_i686: defineCPUMacros(Builder, "i686"); @@ -525,7 +525,7 @@ case CK_K6_2: Builder.defineMacro("__k6_2__"); Builder.defineMacro("__tune_k6_2__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case CK_K6_3: if (CPU != CK_K6_2) { // In case of fallthrough // FIXME: GCC may be enabling these in cases where some other k6 @@ -534,7 +534,7 @@ Builder.defineMacro("__k6_3__"); Builder.defineMacro("__tune_k6_3__"); } - LLVM_FALLTHROUGH; + [[fallthrough]]; case CK_K6: defineCPUMacros(Builder, "k6"); break; @@ -660,13 +660,13 @@ switch (XOPLevel) { case XOP: Builder.defineMacro("__XOP__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case FMA4: Builder.defineMacro("__FMA4__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSE4A: Builder.defineMacro("__SSE4A__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case NoXOP: break; } @@ -786,33 +786,33 @@ switch (SSELevel) { case AVX512F: Builder.defineMacro("__AVX512F__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case AVX2: Builder.defineMacro("__AVX2__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case AVX: Builder.defineMacro("__AVX__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSE42: Builder.defineMacro("__SSE4_2__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSE41: Builder.defineMacro("__SSE4_1__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSSE3: Builder.defineMacro("__SSSE3__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSE3: Builder.defineMacro("__SSE3__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSE2: Builder.defineMacro("__SSE2__"); Builder.defineMacro("__SSE2_MATH__"); // -mfp-math=sse always implied. - LLVM_FALLTHROUGH; + [[fallthrough]]; case SSE1: Builder.defineMacro("__SSE__"); Builder.defineMacro("__SSE_MATH__"); // -mfp-math=sse always implied. - LLVM_FALLTHROUGH; + [[fallthrough]]; case NoSSE: break; } @@ -842,13 +842,13 @@ switch (MMX3DNowLevel) { case AMD3DNowAthlon: Builder.defineMacro("__3dNOW_A__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case AMD3DNow: Builder.defineMacro("__3dNOW__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case MMX: Builder.defineMacro("__MMX__"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case NoMMX3DNow: break; } @@ -1521,7 +1521,7 @@ // to the next constraint. return std::string("^") + std::string(Constraint++, 2); } - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return std::string(1, *Constraint); } diff --git a/clang/lib/CodeGen/CGAtomic.cpp b/clang/lib/CodeGen/CGAtomic.cpp --- a/clang/lib/CodeGen/CGAtomic.cpp +++ b/clang/lib/CodeGen/CGAtomic.cpp @@ -609,7 +609,7 @@ case AtomicExpr::AO__atomic_add_fetch: PostOp = E->getValueType()->isFloatingType() ? llvm::Instruction::FAdd : llvm::Instruction::Add; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_add: case AtomicExpr::AO__hip_atomic_fetch_add: case AtomicExpr::AO__opencl_atomic_fetch_add: @@ -621,7 +621,7 @@ case AtomicExpr::AO__atomic_sub_fetch: PostOp = E->getValueType()->isFloatingType() ? llvm::Instruction::FSub : llvm::Instruction::Sub; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_sub: case AtomicExpr::AO__opencl_atomic_fetch_sub: case AtomicExpr::AO__atomic_fetch_sub: @@ -631,7 +631,7 @@ case AtomicExpr::AO__atomic_min_fetch: PostOpMinMax = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_min: case AtomicExpr::AO__hip_atomic_fetch_min: case AtomicExpr::AO__opencl_atomic_fetch_min: @@ -642,7 +642,7 @@ case AtomicExpr::AO__atomic_max_fetch: PostOpMinMax = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_max: case AtomicExpr::AO__hip_atomic_fetch_max: case AtomicExpr::AO__opencl_atomic_fetch_max: @@ -653,7 +653,7 @@ case AtomicExpr::AO__atomic_and_fetch: PostOp = llvm::Instruction::And; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_and: case AtomicExpr::AO__hip_atomic_fetch_and: case AtomicExpr::AO__opencl_atomic_fetch_and: @@ -663,7 +663,7 @@ case AtomicExpr::AO__atomic_or_fetch: PostOp = llvm::Instruction::Or; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_or: case AtomicExpr::AO__hip_atomic_fetch_or: case AtomicExpr::AO__opencl_atomic_fetch_or: @@ -673,7 +673,7 @@ case AtomicExpr::AO__atomic_xor_fetch: PostOp = llvm::Instruction::Xor; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_xor: case AtomicExpr::AO__hip_atomic_fetch_xor: case AtomicExpr::AO__opencl_atomic_fetch_xor: @@ -683,7 +683,7 @@ case AtomicExpr::AO__atomic_nand_fetch: PostOp = llvm::Instruction::And; // the NOT is special cased below - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_nand: case AtomicExpr::AO__atomic_fetch_nand: Op = llvm::AtomicRMWInst::Nand; @@ -914,13 +914,13 @@ EmitStoreOfScalar(Val1Scalar, MakeAddrLValue(Temp, Val1Ty)); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__atomic_fetch_add: case AtomicExpr::AO__atomic_fetch_sub: case AtomicExpr::AO__atomic_add_fetch: case AtomicExpr::AO__atomic_sub_fetch: ShouldCastToIntPtrTy = !MemTy->isFloatingType(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_store: case AtomicExpr::AO__c11_atomic_exchange: @@ -1045,7 +1045,7 @@ // suitably aligned for the optimized version. if (Misaligned) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_load: case AtomicExpr::AO__c11_atomic_store: case AtomicExpr::AO__c11_atomic_exchange: @@ -1176,7 +1176,7 @@ // T __atomic_fetch_add_N(T *mem, T val, int order) case AtomicExpr::AO__atomic_add_fetch: PostOp = llvm::Instruction::Add; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_add: case AtomicExpr::AO__opencl_atomic_fetch_add: case AtomicExpr::AO__atomic_fetch_add: @@ -1189,7 +1189,7 @@ // T __atomic_fetch_and_N(T *mem, T val, int order) case AtomicExpr::AO__atomic_and_fetch: PostOp = llvm::Instruction::And; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_and: case AtomicExpr::AO__opencl_atomic_fetch_and: case AtomicExpr::AO__hip_atomic_fetch_and: @@ -1202,7 +1202,7 @@ // T __atomic_fetch_or_N(T *mem, T val, int order) case AtomicExpr::AO__atomic_or_fetch: PostOp = llvm::Instruction::Or; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_or: case AtomicExpr::AO__opencl_atomic_fetch_or: case AtomicExpr::AO__hip_atomic_fetch_or: @@ -1215,7 +1215,7 @@ // T __atomic_fetch_sub_N(T *mem, T val, int order) case AtomicExpr::AO__atomic_sub_fetch: PostOp = llvm::Instruction::Sub; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_sub: case AtomicExpr::AO__opencl_atomic_fetch_sub: case AtomicExpr::AO__atomic_fetch_sub: @@ -1227,7 +1227,7 @@ // T __atomic_fetch_xor_N(T *mem, T val, int order) case AtomicExpr::AO__atomic_xor_fetch: PostOp = llvm::Instruction::Xor; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_xor: case AtomicExpr::AO__opencl_atomic_fetch_xor: case AtomicExpr::AO__hip_atomic_fetch_xor: @@ -1238,7 +1238,7 @@ break; case AtomicExpr::AO__atomic_min_fetch: PostOpMinMax = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_min: case AtomicExpr::AO__atomic_fetch_min: case AtomicExpr::AO__hip_atomic_fetch_min: @@ -1251,7 +1251,7 @@ break; case AtomicExpr::AO__atomic_max_fetch: PostOpMinMax = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_max: case AtomicExpr::AO__atomic_fetch_max: case AtomicExpr::AO__hip_atomic_fetch_max: @@ -1266,7 +1266,7 @@ // T __atomic_fetch_nand_N(T *mem, T val, int order) case AtomicExpr::AO__atomic_nand_fetch: PostOp = llvm::Instruction::And; // the NOT is special cased below - LLVM_FALLTHROUGH; + [[fallthrough]]; case AtomicExpr::AO__c11_atomic_fetch_nand: case AtomicExpr::AO__atomic_fetch_nand: LibCallName = "__atomic_fetch_nand"; diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -5034,7 +5034,7 @@ EmitLifetimeEnd(TmpSize, TmpPtr); return Call; } - LLVM_FALLTHROUGH; + [[fallthrough]]; } // OpenCL v2.0 s6.13.17.6 - Kernel query functions need bitcast of block // parameter. @@ -6634,7 +6634,7 @@ case NEON::BI__builtin_neon_vcalt_v: case NEON::BI__builtin_neon_vcaltq_v: std::swap(Ops[0], Ops[1]); - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vcage_v: case NEON::BI__builtin_neon_vcageq_v: case NEON::BI__builtin_neon_vcagt_v: @@ -8037,7 +8037,7 @@ int Indices[] = {1 - Lane, Lane}; return Builder.CreateShuffleVector(Ops[1], Ld, Indices, "vld1q_lane"); } - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vld1_lane_v: { Ops[1] = Builder.CreateBitCast(Ops[1], Ty); PtrOp0 = Builder.CreateElementBitCast(PtrOp0, VTy->getElementType()); @@ -8077,7 +8077,7 @@ case NEON::BI__builtin_neon_vsri_n_v: case NEON::BI__builtin_neon_vsriq_n_v: rightShift = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vsli_n_v: case NEON::BI__builtin_neon_vsliq_n_v: Ops[2] = EmitNeonShiftVector(Ops[2], Ty, rightShift); @@ -8100,7 +8100,7 @@ return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst1, Tys), Ops); } - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vst1_lane_v: { Ops[1] = Builder.CreateBitCast(Ops[1], Ty); Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]); @@ -10119,7 +10119,7 @@ case NEON::BI__builtin_neon_vcvts_f32_u32: case NEON::BI__builtin_neon_vcvtd_f64_u64: usgn = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vcvts_f32_s32: case NEON::BI__builtin_neon_vcvtd_f64_s64: { Ops.push_back(EmitScalarExpr(E->getArg(0))); @@ -10135,7 +10135,7 @@ case NEON::BI__builtin_neon_vcvth_f16_u32: case NEON::BI__builtin_neon_vcvth_f16_u64: usgn = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vcvth_f16_s16: case NEON::BI__builtin_neon_vcvth_f16_s32: case NEON::BI__builtin_neon_vcvth_f16_s64: { @@ -11268,7 +11268,7 @@ case NEON::BI__builtin_neon_vaddv_u8: // FIXME: These are handled by the AArch64 scalar code. usgn = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vaddv_s8: { Int = usgn ? Intrinsic::aarch64_neon_uaddv : Intrinsic::aarch64_neon_saddv; Ty = Int32Ty; @@ -11280,7 +11280,7 @@ } case NEON::BI__builtin_neon_vaddv_u16: usgn = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vaddv_s16: { Int = usgn ? Intrinsic::aarch64_neon_uaddv : Intrinsic::aarch64_neon_saddv; Ty = Int32Ty; @@ -11292,7 +11292,7 @@ } case NEON::BI__builtin_neon_vaddvq_u8: usgn = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vaddvq_s8: { Int = usgn ? Intrinsic::aarch64_neon_uaddv : Intrinsic::aarch64_neon_saddv; Ty = Int32Ty; @@ -11304,7 +11304,7 @@ } case NEON::BI__builtin_neon_vaddvq_u16: usgn = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NEON::BI__builtin_neon_vaddvq_s16: { Int = usgn ? Intrinsic::aarch64_neon_uaddv : Intrinsic::aarch64_neon_saddv; Ty = Int32Ty; @@ -12347,7 +12347,7 @@ default: break; case clang::X86::BI__builtin_ia32_vfmsubph512_mask3: Subtract = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case clang::X86::BI__builtin_ia32_vfmaddph512_mask: case clang::X86::BI__builtin_ia32_vfmaddph512_maskz: case clang::X86::BI__builtin_ia32_vfmaddph512_mask3: @@ -12355,7 +12355,7 @@ break; case clang::X86::BI__builtin_ia32_vfmsubaddph512_mask3: Subtract = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case clang::X86::BI__builtin_ia32_vfmaddsubph512_mask: case clang::X86::BI__builtin_ia32_vfmaddsubph512_maskz: case clang::X86::BI__builtin_ia32_vfmaddsubph512_mask3: @@ -12363,21 +12363,21 @@ break; case clang::X86::BI__builtin_ia32_vfmsubps512_mask3: Subtract = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case clang::X86::BI__builtin_ia32_vfmaddps512_mask: case clang::X86::BI__builtin_ia32_vfmaddps512_maskz: case clang::X86::BI__builtin_ia32_vfmaddps512_mask3: IID = llvm::Intrinsic::x86_avx512_vfmadd_ps_512; break; case clang::X86::BI__builtin_ia32_vfmsubpd512_mask3: Subtract = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case clang::X86::BI__builtin_ia32_vfmaddpd512_mask: case clang::X86::BI__builtin_ia32_vfmaddpd512_maskz: case clang::X86::BI__builtin_ia32_vfmaddpd512_mask3: IID = llvm::Intrinsic::x86_avx512_vfmadd_pd_512; break; case clang::X86::BI__builtin_ia32_vfmsubaddps512_mask3: Subtract = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case clang::X86::BI__builtin_ia32_vfmaddsubps512_mask: case clang::X86::BI__builtin_ia32_vfmaddsubps512_maskz: case clang::X86::BI__builtin_ia32_vfmaddsubps512_mask3: @@ -12385,7 +12385,7 @@ break; case clang::X86::BI__builtin_ia32_vfmsubaddpd512_mask3: Subtract = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case clang::X86::BI__builtin_ia32_vfmaddsubpd512_mask: case clang::X86::BI__builtin_ia32_vfmaddsubpd512_maskz: case clang::X86::BI__builtin_ia32_vfmaddsubpd512_mask3: @@ -14725,7 +14725,7 @@ case X86::BI__builtin_ia32_cmppd256_mask: case X86::BI__builtin_ia32_cmppd512_mask: IsMaskFCmp = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case X86::BI__builtin_ia32_cmpps: case X86::BI__builtin_ia32_cmpps256: case X86::BI__builtin_ia32_cmppd: @@ -15214,7 +15214,7 @@ } case X86::BI__builtin_ia32_vfcmaddcph512_mask: IsConjFMA = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case X86::BI__builtin_ia32_vfmaddcph512_mask: { Intrinsic::ID IID = IsConjFMA ? Intrinsic::x86_avx512fp16_mask_vfcmadd_cph_512 @@ -15224,7 +15224,7 @@ } case X86::BI__builtin_ia32_vfcmaddcsh_round_mask: IsConjFMA = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case X86::BI__builtin_ia32_vfmaddcsh_round_mask: { Intrinsic::ID IID = IsConjFMA ? Intrinsic::x86_avx512fp16_mask_vfcmadd_csh : Intrinsic::x86_avx512fp16_mask_vfmadd_csh; @@ -15234,7 +15234,7 @@ } case X86::BI__builtin_ia32_vfcmaddcsh_round_mask3: IsConjFMA = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case X86::BI__builtin_ia32_vfmaddcsh_round_mask3: { Intrinsic::ID IID = IsConjFMA ? Intrinsic::x86_avx512fp16_mask_vfcmadd_csh : Intrinsic::x86_avx512fp16_mask_vfmadd_csh; diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2340,7 +2340,7 @@ RetAttrs.addAttribute(llvm::Attribute::SExt); else RetAttrs.addAttribute(llvm::Attribute::ZExt); - LLVM_FALLTHROUGH; + [[fallthrough]]; case ABIArgInfo::Direct: if (RetAI.getInReg()) RetAttrs.addAttribute(llvm::Attribute::InReg); @@ -2476,7 +2476,7 @@ Attrs.addAttribute(llvm::Attribute::SExt); else Attrs.addAttribute(llvm::Attribute::ZExt); - LLVM_FALLTHROUGH; + [[fallthrough]]; case ABIArgInfo::Direct: if (ArgNo == 0 && FI.isChainCall()) Attrs.addAttribute(llvm::Attribute::Nest); @@ -5550,7 +5550,7 @@ Builder.CreateStore(elt, eltAddr); } // FALLTHROUGH - LLVM_FALLTHROUGH; + [[fallthrough]]; } case ABIArgInfo::InAlloca: diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp --- a/clang/lib/CodeGen/CGClass.cpp +++ b/clang/lib/CodeGen/CGClass.cpp @@ -1505,7 +1505,7 @@ } // Fallthrough: act like we're in the base variant. - LLVM_FALLTHROUGH; + [[fallthrough]]; case Dtor_Base: assert(Body); diff --git a/clang/lib/CodeGen/CGCoroutine.cpp b/clang/lib/CodeGen/CGCoroutine.cpp --- a/clang/lib/CodeGen/CGCoroutine.cpp +++ b/clang/lib/CodeGen/CGCoroutine.cpp @@ -689,7 +689,7 @@ CGM.Error(E->getBeginLoc(), "this builtin expect that __builtin_coro_id has" " been used earlier in this function"); // Fallthrough to the next case to add TokenNone as the first argument. - LLVM_FALLTHROUGH; + [[fallthrough]]; } // @llvm.coro.suspend takes a token parameter. Add token 'none' as the first // argument. diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -3613,7 +3613,7 @@ // them distinct if they are ODR-uniqued. if (Identifier.empty()) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case llvm::dwarf::DW_TAG_structure_type: case llvm::dwarf::DW_TAG_union_type: diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -839,7 +839,7 @@ // If D is pseudo-strong, treat it like __unsafe_unretained here. This means // that we omit the retain, and causes non-autoreleased return values to be // immediately released. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case Qualifiers::OCL_ExplicitNone: diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -158,7 +158,7 @@ case ObjCRuntime::GNUstep: if (L.ObjCRuntime.getVersion() >= VersionTuple(1, 7)) return EHPersonality::GNUstep_ObjC; - LLVM_FALLTHROUGH; + [[fallthrough]]; case ObjCRuntime::GCC: case ObjCRuntime::ObjFW: if (L.hasSjLjExceptions()) diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp --- a/clang/lib/CodeGen/CGExprAgg.cpp +++ b/clang/lib/CodeGen/CGExprAgg.cpp @@ -850,7 +850,7 @@ return; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case CK_NoOp: diff --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp --- a/clang/lib/CodeGen/CGExprCXX.cpp +++ b/clang/lib/CodeGen/CGExprCXX.cpp @@ -646,7 +646,7 @@ case CXXConstructExpr::CK_VirtualBase: ForVirtualBase = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case CXXConstructExpr::CK_NonVirtualBase: Type = Ctor_Base; diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -718,7 +718,7 @@ case LangOptions::SOB_Undefined: if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case LangOptions::SOB_Trapping: if (CanElideOverflowCheck(CGF.getContext(), Ops)) return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); @@ -2478,7 +2478,7 @@ case LangOptions::SOB_Undefined: if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) return Builder.CreateNSWAdd(InVal, Amount, Name); - LLVM_FALLTHROUGH; + [[fallthrough]]; case LangOptions::SOB_Trapping: if (!E->canOverflow()) return Builder.CreateNSWAdd(InVal, Amount, Name); @@ -3650,7 +3650,7 @@ case LangOptions::SOB_Undefined: if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) return Builder.CreateNSWAdd(op.LHS, op.RHS, "add"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case LangOptions::SOB_Trapping: if (CanElideOverflowCheck(CGF.getContext(), op)) return Builder.CreateNSWAdd(op.LHS, op.RHS, "add"); @@ -3800,7 +3800,7 @@ case LangOptions::SOB_Undefined: if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) return Builder.CreateNSWSub(op.LHS, op.RHS, "sub"); - LLVM_FALLTHROUGH; + [[fallthrough]]; case LangOptions::SOB_Trapping: if (CanElideOverflowCheck(CGF.getContext(), op)) return Builder.CreateNSWSub(op.LHS, op.RHS, "sub"); diff --git a/clang/lib/CodeGen/CGObjCRuntime.cpp b/clang/lib/CodeGen/CGObjCRuntime.cpp --- a/clang/lib/CodeGen/CGObjCRuntime.cpp +++ b/clang/lib/CodeGen/CGObjCRuntime.cpp @@ -293,7 +293,7 @@ switch (paramDecl->getType().getQualifiers().getObjCLifetime()) { case Qualifiers::OCL_Strong: exn = CGF.EmitARCRetainNonBlock(exn); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Qualifiers::OCL_None: case Qualifiers::OCL_ExplicitNone: diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -5475,7 +5475,7 @@ switch (CFRuntime) { default: break; - case LangOptions::CoreFoundationABI::Swift: LLVM_FALLTHROUGH; + case LangOptions::CoreFoundationABI::Swift: [[fallthrough]]; case LangOptions::CoreFoundationABI::Swift5_0: CFConstantStringClassName = Triple.isOSDarwin() ? "$s15SwiftFoundation19_NSCFConstantStringCN" @@ -6132,7 +6132,7 @@ TSK_ExplicitInstantiationDefinition && Spec->hasDefinition()) DI->completeTemplateDefinition(*Spec); - } LLVM_FALLTHROUGH; + } [[fallthrough]]; case Decl::CXXRecord: { CXXRecordDecl *CRD = cast(D); if (CGDebugInfo *DI = getModuleDebugInfo()) { diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -3542,7 +3542,7 @@ } assert(isa(Ty)); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Type::ObjCInterface: if (cast(Ty)->getDecl()->getSuperClass()) { @@ -4515,7 +4515,7 @@ switch (CatchType.getQualifiers().getObjCLifetime()) { case Qualifiers::OCL_Strong: CastExn = CGF.EmitARCRetainNonBlock(CastExn); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Qualifiers::OCL_None: case Qualifiers::OCL_ExplicitNone: diff --git a/clang/lib/CodeGen/MacroPPCallbacks.cpp b/clang/lib/CodeGen/MacroPPCallbacks.cpp --- a/clang/lib/CodeGen/MacroPPCallbacks.cpp +++ b/clang/lib/CodeGen/MacroPPCallbacks.cpp @@ -120,7 +120,7 @@ if (PP.getSourceManager().isWrittenInCommandLineFile(Loc)) return; updateStatusToNextScope(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case CommandLineIncludeScope: EnteredCommandLineIncludeFiles++; break; diff --git a/clang/lib/CodeGen/VarBypassDetector.cpp b/clang/lib/CodeGen/VarBypassDetector.cpp --- a/clang/lib/CodeGen/VarBypassDetector.cpp +++ b/clang/lib/CodeGen/VarBypassDetector.cpp @@ -77,7 +77,7 @@ return false; ++StmtsToSkip; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Stmt::GotoStmtClass: FromScopes.push_back({S, ParentScope}); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -555,7 +555,7 @@ case llvm::Triple::thumbeb: if (Triple.isAndroid()) return true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case llvm::Triple::mips64: case llvm::Triple::mips64el: case llvm::Triple::mips: @@ -3010,7 +3010,7 @@ // If -Ofast is the optimization level, then -ffast-math should be enabled if (!OFastEnabled) continue; - LLVM_FALLTHROUGH; + [[fallthrough]]; case options::OPT_ffast_math: HonorINFs = false; HonorNaNs = false; diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -227,7 +227,7 @@ case llvm::Triple::armeb: case llvm::Triple::thumbeb: IsBigEndian = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case llvm::Triple::arm: case llvm::Triple::thumb: if (Arg *A = Args.getLastArg(options::OPT_mlittle_endian, diff --git a/clang/lib/Driver/ToolChains/Myriad.cpp b/clang/lib/Driver/ToolChains/Myriad.cpp --- a/clang/lib/Driver/ToolChains/Myriad.cpp +++ b/clang/lib/Driver/ToolChains/Myriad.cpp @@ -218,7 +218,7 @@ default: D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << "myriad"; - LLVM_FALLTHROUGH; + [[fallthrough]]; case llvm::Triple::shave: return; case llvm::Triple::sparc: diff --git a/clang/lib/Edit/RewriteObjCFoundationAPI.cpp b/clang/lib/Edit/RewriteObjCFoundationAPI.cpp --- a/clang/lib/Edit/RewriteObjCFoundationAPI.cpp +++ b/clang/lib/Edit/RewriteObjCFoundationAPI.cpp @@ -796,28 +796,28 @@ case NSAPI::NSNumberWithUnsignedInt: case NSAPI::NSNumberWithUnsignedInteger: CallIsUnsigned = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NSAPI::NSNumberWithInt: case NSAPI::NSNumberWithInteger: break; case NSAPI::NSNumberWithUnsignedLong: CallIsUnsigned = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NSAPI::NSNumberWithLong: CallIsLong = true; break; case NSAPI::NSNumberWithUnsignedLongLong: CallIsUnsigned = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NSAPI::NSNumberWithLongLong: CallIsLongLong = true; break; case NSAPI::NSNumberWithDouble: CallIsDouble = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case NSAPI::NSNumberWithFloat: CallIsFloating = true; break; diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp --- a/clang/lib/ExtractAPI/DeclarationFragments.cpp +++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp @@ -136,7 +136,7 @@ Fragments.append("template", DeclarationFragments::FragmentKind::Keyword); Fragments.appendSpace(); // Fallthrough after adding the keyword to handle the actual type. - LLVM_FALLTHROUGH; + [[fallthrough]]; case NestedNameSpecifier::TypeSpec: { const Type *T = NNS->getAsType(); diff --git a/clang/lib/Format/FormatTokenLexer.cpp b/clang/lib/Format/FormatTokenLexer.cpp --- a/clang/lib/Format/FormatTokenLexer.cpp +++ b/clang/lib/Format/FormatTokenLexer.cpp @@ -1027,7 +1027,7 @@ // the same as a single LF. if (i + 1 < e && Text[i + 1] == '\n') break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case '\n': ++FormatTok->NewlinesBefore; if (!InEscape) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1061,7 +1061,7 @@ CurrentToken->isOneOf(tok::kw_constexpr, tok::identifier)) { next(); } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_while: if (CurrentToken && CurrentToken->is(tok::l_paren)) { next(); diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -573,7 +573,7 @@ break; } // Else, if it is 'default:', fall through to the case handling. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case tok::kw_case: if (Style.isVerilog() || @@ -600,7 +600,7 @@ } if (handleCppAttributes()) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: ParseDefault(); break; @@ -736,7 +736,7 @@ case tok::identifier: if (!Tok->is(TT_StatementMacro)) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::at: case tok::semi: case tok::kw_if: @@ -1627,7 +1627,7 @@ if (!Style.isCpp()) break; // Handle C++ "(inline|export) namespace". - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_inline: nextToken(); if (FormatTok->is(tok::kw_namespace)) { @@ -1804,7 +1804,7 @@ addUnwrappedLine(); return; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_struct: case tok::kw_union: if (parseStructLike()) @@ -2531,7 +2531,7 @@ case tok::ampamp: if (AmpAmpTokenType != TT_Unknown) FormatTok->setFinalizedType(AmpAmpTokenType); - LLVM_FALLTHROUGH; + [[fallthrough]]; default: nextToken(); break; diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -1441,7 +1441,7 @@ << Module->Name << Locked.getErrorMessage(); // Clear out any potential leftover. Locked.unsafeRemoveLockFile(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case llvm::LockFileManager::LFS_Owned: // We're responsible for building the module ourselves. return compileModuleAndReadASTImpl(ImportingInstance, ImportLoc, @@ -1879,7 +1879,7 @@ diag::warn_module_config_mismatch) << ModuleFilename; // Fall through to error out. - LLVM_FALLTHROUGH; + [[fallthrough]]; case ASTReader::VersionMismatch: case ASTReader::HadErrors: ModuleLoader::HadFatalFailure = true; diff --git a/clang/lib/Frontend/SerializedDiagnosticReader.cpp b/clang/lib/Frontend/SerializedDiagnosticReader.cpp --- a/clang/lib/Frontend/SerializedDiagnosticReader.cpp +++ b/clang/lib/Frontend/SerializedDiagnosticReader.cpp @@ -184,7 +184,7 @@ consumeError(std::move(Err)); return SDError::MalformedMetadataBlock; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Cursor::BlockEnd: if (!VersionChecked) return SDError::MissingVersion; diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp --- a/clang/lib/Index/USRGeneration.cpp +++ b/clang/lib/Index/USRGeneration.cpp @@ -963,7 +963,7 @@ case TemplateArgument::TemplateExpansion: Out << 'P'; // pack expansion of... - LLVM_FALLTHROUGH; + [[fallthrough]]; case TemplateArgument::Template: VisitTemplateName(Arg.getAsTemplateOrTemplatePattern()); break; diff --git a/clang/lib/Interpreter/IncrementalParser.cpp b/clang/lib/Interpreter/IncrementalParser.cpp --- a/clang/lib/Interpreter/IncrementalParser.cpp +++ b/clang/lib/Interpreter/IncrementalParser.cpp @@ -59,22 +59,22 @@ CI.getFrontendOpts().ProgramAction); return Act; case frontend::ASTDump: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::ASTPrint: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::ParseSyntaxOnly: Act = CreateFrontendAction(CI); break; case frontend::PluginAction: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::EmitAssembly: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::EmitBC: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::EmitObj: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::PrintPreprocessedInput: - LLVM_FALLTHROUGH; + [[fallthrough]]; case frontend::EmitLLVMOnly: Act.reset(new EmitLLVMOnlyAction(&LLVMCtx)); break; diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp --- a/clang/lib/Lex/InitHeaderSearch.cpp +++ b/clang/lib/Lex/InitHeaderSearch.cpp @@ -246,7 +246,7 @@ case llvm::Triple::Win32: if (triple.getEnvironment() != llvm::Triple::Cygnus) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: // FIXME: temporary hack: hard-coded paths. AddPath("/usr/local/include", System, false); diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2905,7 +2905,7 @@ break; } // FALL THROUGH. - LLVM_FALLTHROUGH; + [[fallthrough]]; case '\r': case '\n': // Okay, we found the end of the line. First, back up past the \0, \r, \n. @@ -3591,7 +3591,7 @@ case '\r': if (CurPtr[0] == '\n') (void)getAndAdvanceChar(CurPtr, Result); - LLVM_FALLTHROUGH; + [[fallthrough]]; case '\n': // If we are inside a preprocessor directive and we see the end of line, // we know we are done with the directive, so return an EOD token. @@ -3788,7 +3788,7 @@ return LexCharConstant(Result, ConsumeChar(CurPtr, SizeTmp, Result), tok::wide_char_constant); // FALL THROUGH, treating L like the start of an identifier. - LLVM_FALLTHROUGH; + [[fallthrough]]; // C99 6.4.2: Identifiers. case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp --- a/clang/lib/Lex/LiteralSupport.cpp +++ b/clang/lib/Lex/LiteralSupport.cpp @@ -766,13 +766,13 @@ switch (bytesToWrite) { // note: everything falls through. case 4: *--ResultBuf = (UTF8)((UcnVal | byteMark) & byteMask); UcnVal >>= 6; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 3: *--ResultBuf = (UTF8)((UcnVal | byteMark) & byteMask); UcnVal >>= 6; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 2: *--ResultBuf = (UTF8)((UcnVal | byteMark) & byteMask); UcnVal >>= 6; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 1: *--ResultBuf = (UTF8) (UcnVal | firstByteMark[bytesToWrite]); } @@ -1037,7 +1037,7 @@ break; } } - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'j': case 'J': if (isImaginary) break; // Cannot be repeated. diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -1668,7 +1668,7 @@ break; } } - LLVM_FALLTHROUGH; + [[fallthrough]]; default: Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token); diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -986,7 +986,7 @@ TrackGMFState.handleModule(ImportSeqState.afterTopLevelSeq()); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; default: TrackGMFState.handleMisc(); ImportSeqState.handleMisc(); @@ -1232,7 +1232,7 @@ Suffix.back().setLocation(SemiLoc); Suffix.back().setAnnotationEndLoc(SemiLoc); Suffix.back().setAnnotationValue(Action.ModuleForHeader); - LLVM_FALLTHROUGH; + [[fallthrough]]; case ImportAction::ModuleImport: case ImportAction::HeaderUnitImport: diff --git a/clang/lib/Lex/TokenConcatenation.cpp b/clang/lib/Lex/TokenConcatenation.cpp --- a/clang/lib/Lex/TokenConcatenation.cpp +++ b/clang/lib/Lex/TokenConcatenation.cpp @@ -240,7 +240,7 @@ // it as an identifier. if (!PrevTok.hasUDSuffix()) return false; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::identifier: // id+id or id+number or id+L"foo". // id+'.'... will not append. if (Tok.is(tok::numeric_constant)) diff --git a/clang/lib/Parse/ParseCXXInlineMethods.cpp b/clang/lib/Parse/ParseCXXInlineMethods.cpp --- a/clang/lib/Parse/ParseCXXInlineMethods.cpp +++ b/clang/lib/Parse/ParseCXXInlineMethods.cpp @@ -880,7 +880,7 @@ case tok::semi: if (StopAtSemi) return false; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: // consume this token. Toks.push_back(Tok); @@ -1258,13 +1258,13 @@ goto consume_token; if (AngleCount) --AngleCount; if (KnownTemplateCount) --KnownTemplateCount; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::greatergreater: if (!getLangOpts().CPlusPlus11) goto consume_token; if (AngleCount) --AngleCount; if (KnownTemplateCount) --KnownTemplateCount; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::greater: if (AngleCount) --AngleCount; if (KnownTemplateCount) --KnownTemplateCount; @@ -1369,7 +1369,7 @@ case tok::semi: if (CIK == CIK_DefaultInitializer) return true; // End of the default initializer. - LLVM_FALLTHROUGH; + [[fallthrough]]; default: consume_token: Toks.push_back(Tok); diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -2802,7 +2802,7 @@ } } // Fall through. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case tok::comma: case tok::equal: @@ -4240,13 +4240,13 @@ isInvalid = true; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_private: // It's fine (but redundant) to check this for __generic on the // fallthrough path; we only form the __generic token in OpenCL mode. if (!getLangOpts().OpenCL) goto DoneWithDeclSpec; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw___private: case tok::kw___global: case tok::kw___local: @@ -5161,7 +5161,7 @@ case tok::identifier: // foo::bar if (TryAltiVecVectorToken()) return true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_typename: // typename T::type // Annotate typenames and C++ scope specifiers. If we get one, just // recurse to handle whatever we get. @@ -5304,7 +5304,7 @@ return false; if (TryAltiVecVectorToken()) return true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_decltype: // decltype(T())::type case tok::kw_typename: // typename T::type // Annotate typenames and C++ scope specifiers. If we get one, just @@ -5719,7 +5719,7 @@ case tok::kw_private: if (!getLangOpts().OpenCL) goto DoneWithTypeQuals; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw___private: case tok::kw___global: case tok::kw___local: @@ -5743,7 +5743,7 @@ if (TryKeywordIdentFallback(false)) continue; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw___sptr: case tok::kw___w64: case tok::kw___ptr64: @@ -5794,7 +5794,7 @@ continue; // do *not* consume the next token! } // otherwise, FALL THROUGH! - LLVM_FALLTHROUGH; + [[fallthrough]]; default: DoneWithTypeQuals: // If this is not a type-qualifier token, we're done reading type diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -404,7 +404,7 @@ case tok::r_brace: if (!NestedModules) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: ParsedAttributes Attrs(AttrFactory); MaybeParseCXX11Attributes(Attrs); @@ -3242,7 +3242,7 @@ // yet. if (getLangOpts().OpenCL && !NextToken().is(tok::colon)) return ParseCXXClassMemberDeclaration(AS, AccessAttrs); - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_public: case tok::kw_protected: { if (getLangOpts().HLSL) @@ -4717,7 +4717,7 @@ Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists; // Fall through to skip. - LLVM_FALLTHROUGH; + [[fallthrough]]; case IEB_Skip: Braces.skipToEnd(); diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -945,7 +945,7 @@ case CastParseKind::UnaryExprOnly: if (!getLangOpts().CPlusPlus) ParenExprType = CompoundLiteral; - LLVM_FALLTHROUGH; + [[fallthrough]]; case CastParseKind::AnyCastExpr: ParenExprType = ParenParseOption::CastExpr; break; @@ -1413,7 +1413,7 @@ case tok::kw__Alignof: // unary-expression: '_Alignof' '(' type-name ')' if (!getLangOpts().C11) Diag(Tok, diag::ext_c11_feature) << Tok.getName(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_alignof: // unary-expression: 'alignof' '(' type-id ')' case tok::kw___alignof: // unary-expression: '__alignof' unary-expression // unary-expression: '__alignof' '(' type-name ')' @@ -1502,7 +1502,7 @@ Ty.get(), nullptr); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::annot_decltype: case tok::kw_char: @@ -1621,7 +1621,7 @@ } // Fall through to treat the template-id as an id-expression. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case tok::kw_operator: // [C++] id-expression: operator/conversion-function-id @@ -1764,7 +1764,7 @@ Res = ParseObjCMessageExpression(); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; default: NotCastExpr = true; return ExprError(); @@ -1795,7 +1795,7 @@ if (Tok.isAtStartOfLine()) return Res; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::period: case tok::arrow: break; @@ -1883,7 +1883,7 @@ break; } // Fall through; this isn't a message send. - LLVM_FALLTHROUGH; + [[fallthrough]]; default: // Not a postfix-expression suffix. return LHS; diff --git a/clang/lib/Parse/ParseInit.cpp b/clang/lib/Parse/ParseInit.cpp --- a/clang/lib/Parse/ParseInit.cpp +++ b/clang/lib/Parse/ParseInit.cpp @@ -565,7 +565,7 @@ Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists; // Fall through to skip. - LLVM_FALLTHROUGH; + [[fallthrough]]; case IEB_Skip: Braces.skipToEnd(); diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -259,7 +259,7 @@ case tok::identifier: // identifier if (!WithOperator) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: P.Diag(Tok.getLocation(), diag::err_omp_expected_reduction_identifier); P.SkipUntil(tok::colon, tok::r_paren, tok::annot_pragma_openmp_end, @@ -2761,7 +2761,7 @@ } HasAssociatedStatement = false; // Fall through for further analysis. - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPD_parallel: case OMPD_simd: case OMPD_tile: @@ -3253,7 +3253,7 @@ << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPC_if: Clause = ParseOpenMPSingleExprWithArgClause(DKind, CKind, WrongDirective); break; @@ -3351,7 +3351,7 @@ Clause = ParseOpenMPClause(CKind, WrongDirective); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPC_init: case OMPC_use: Clause = ParseOpenMPInteropClause(CKind, WrongDirective); diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -222,7 +222,7 @@ } // Fall through - LLVM_FALLTHROUGH; + [[fallthrough]]; } default: { @@ -448,7 +448,7 @@ // processing a #pragma omp clause. ProhibitAttributes(CXX11Attrs); ProhibitAttributes(GNUAttrs); - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::annot_attr_openmp: // Do not prohibit attributes if they were OpenMP attributes. return ParseOpenMPDeclarativeOrExecutableDirective(StmtCtx); diff --git a/clang/lib/Parse/ParseTentative.cpp b/clang/lib/Parse/ParseTentative.cpp --- a/clang/lib/Parse/ParseTentative.cpp +++ b/clang/lib/Parse/ParseTentative.cpp @@ -158,7 +158,7 @@ ConsumeToken(); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_typeof: case tok::kw___attribute: case tok::kw___underlying_type: { @@ -203,7 +203,7 @@ case tok::annot_cxxscope: ConsumeAnnotationToken(); - LLVM_FALLTHROUGH; + [[fallthrough]]; default: ConsumeAnyToken(); @@ -1334,7 +1334,7 @@ if (Next.isOneOf(tok::kw_new, // ::new tok::kw_delete)) // ::delete return TPResult::False; - LLVM_FALLTHROUGH; + [[fallthrough]]; } case tok::kw___super: case tok::kw_decltype: @@ -1401,7 +1401,7 @@ case tok::kw_private: if (!getLangOpts().OpenCL) return TPResult::False; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw___private: case tok::kw___local: case tok::kw___global: @@ -1573,7 +1573,7 @@ return TPResult::False; } // If that succeeded, fallthrough into the generic simple-type-id case. - LLVM_FALLTHROUGH; + [[fallthrough]]; // The ambiguity resides in a simple-type-specifier/typename-specifier // followed by a '('. The '(' could either be the start of: @@ -1616,7 +1616,7 @@ return TPResult::True; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_char: case tok::kw_wchar_t: diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -386,7 +386,7 @@ case tok::semi: if (HasFlagsSet(Flags, StopAtSemi)) return false; - LLVM_FALLTHROUGH; + [[fallthrough]]; default: // Skip this token. ConsumeAnyToken(); @@ -932,7 +932,7 @@ } // This must be 'export template'. Parse it so we can diagnose our lack // of support. - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::kw_using: case tok::kw_namespace: case tok::kw_typedef: @@ -1830,7 +1830,7 @@ AnnotateScopeToken(SS, !WasScopeAnnotation); return ANK_TemplateName; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::NC_VarTemplate: case Sema::NC_FunctionTemplate: case Sema::NC_UndeclaredTemplate: { @@ -2167,7 +2167,7 @@ Diag(Tok, diag::err_invalid_token_after_declarator_suggest_equal) << Kind << FixItHint::CreateReplacement(SourceRange(Tok.getLocation()), "="); - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::equal: return true; } diff --git a/clang/lib/Rewrite/HTMLRewrite.cpp b/clang/lib/Rewrite/HTMLRewrite.cpp --- a/clang/lib/Rewrite/HTMLRewrite.cpp +++ b/clang/lib/Rewrite/HTMLRewrite.cpp @@ -488,14 +488,14 @@ ++TokOffs; --TokLen; // FALL THROUGH to chop the 8 - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::wide_string_literal: case tok::utf16_string_literal: case tok::utf32_string_literal: // Chop off the L, u, U or 8 prefix ++TokOffs; --TokLen; - LLVM_FALLTHROUGH; + [[fallthrough]]; case tok::string_literal: // FIXME: Exclude the optional ud-suffix from the highlighted range. HighlightRange(RB, TokOffs, TokOffs+TokLen, BufferStart, diff --git a/clang/lib/Sema/CodeCompleteConsumer.cpp b/clang/lib/Sema/CodeCompleteConsumer.cpp --- a/clang/lib/Sema/CodeCompleteConsumer.cpp +++ b/clang/lib/Sema/CodeCompleteConsumer.cpp @@ -776,7 +776,7 @@ // Do nothing: Patterns can come with cursor kinds! break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case RK_Declaration: { // Set the availability based on attributes. diff --git a/clang/lib/Sema/JumpDiagnostics.cpp b/clang/lib/Sema/JumpDiagnostics.cpp --- a/clang/lib/Sema/JumpDiagnostics.cpp +++ b/clang/lib/Sema/JumpDiagnostics.cpp @@ -354,7 +354,7 @@ BuildScopeInformation(Var, ParentScope); ++StmtsToSkip; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Stmt::GotoStmtClass: // Remember both what scope a goto is in as well as the fact that we have diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -2108,7 +2108,7 @@ case Builtin::BI__builtin_alloca_with_align_uninitialized: if (SemaBuiltinAllocaWithAlign(TheCall)) return ExprError(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BI__builtin_alloca: case Builtin::BI__builtin_alloca_uninitialized: Diag(TheCall->getBeginLoc(), diag::warn_alloca) @@ -2485,7 +2485,7 @@ break; case Builtin::BI__builtin_os_log_format: Cleanup.setExprNeedsCleanups(true); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BI__builtin_os_log_format_buffer_size: if (SemaBuiltinOSLogFormat(TheCall)) return ExprError(); @@ -4039,7 +4039,7 @@ case PPC::BI__builtin_unpack_longdouble: if (SemaBuiltinConstantArgRange(TheCall, 1, 0, 1)) return true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case PPC::BI__builtin_pack_longdouble: if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble()) return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) @@ -12322,7 +12322,7 @@ return IntRange(R.Width, /*NonNegative*/ true); } } - LLVM_FALLTHROUGH; + [[fallthrough]]; case BO_ShlAssign: return IntRange::forValueOfType(C, GetExprType(E)); diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -1807,7 +1807,7 @@ Results.AddResult(Result("mutable")); Results.AddResult(Result("virtual")); } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::PCC_ObjCInterface: case Sema::PCC_ObjCImplementation: @@ -2095,7 +2095,7 @@ AddObjCTopLevelResults(Results, true); AddTypedefResult(Results); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::PCC_Class: if (SemaRef.getLangOpts().CPlusPlus) { @@ -2153,7 +2153,7 @@ Builder); } } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::PCC_Template: case Sema::PCC_MemberTemplate: @@ -2423,14 +2423,14 @@ AddStaticAssertResult(Builder, Results, SemaRef.getLangOpts()); } - LLVM_FALLTHROUGH; + [[fallthrough]]; // Fall through (for statement expressions). case Sema::PCC_ForInit: case Sema::PCC_Condition: AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results); // Fall through: conditions and statements can have expressions. - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::PCC_ParenthesizedExpression: if (SemaRef.getLangOpts().ObjCAutoRefCount && @@ -2460,7 +2460,7 @@ Results.AddResult(Result(Builder.TakeString())); } // Fall through - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::PCC_Expression: { if (SemaRef.getLangOpts().CPlusPlus) { diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -456,7 +456,7 @@ } } // If typo correction failed or was not performed, fall through - LLVM_FALLTHROUGH; + [[fallthrough]]; case LookupResult::FoundOverloaded: case LookupResult::FoundUnresolvedValue: Result.suppressDiagnostics(); @@ -7637,7 +7637,7 @@ Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast(D.getDeclSpec().getConstexprSpecifier()); - LLVM_FALLTHROUGH; + [[fallthrough]]; case ConstexprSpecKind::Constexpr: NewVD->setConstexpr(true); @@ -13292,7 +13292,7 @@ // that has an in-class initializer, so we type-check this like // a declaration. // - LLVM_FALLTHROUGH; + [[fallthrough]]; case VarDecl::DeclarationOnly: // It's only a declaration. diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -10797,7 +10797,7 @@ PastFunctionChunk = true; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorChunk::Array: NeedsTypedef = true; extendRight(After, Chunk.getSourceRange()); @@ -15424,7 +15424,7 @@ if (!Args[1]->isDefaultArgument()) return false; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 1: return !Args[0]->isDefaultArgument(); } @@ -18118,7 +18118,7 @@ case EST_NoexceptTrue: if (!Finder.TraverseStmt(Proto->getNoexceptExpr())) return true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case EST_Dynamic: for (const auto &E : Proto->exceptions()) { diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -976,7 +976,7 @@ DiagRuntimeBehavior( E->getBeginLoc(), nullptr, PDiag(diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg) << Ty << CT); - LLVM_FALLTHROUGH; + [[fallthrough]]; case VAK_Valid: if (Ty->isRecordType()) { // This is unlikely to be what the user intended. If the class has a @@ -3391,7 +3391,7 @@ valueKind = VK_PRValue; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Decl::ImplicitParam: case Decl::ParmVar: { @@ -3488,7 +3488,7 @@ valueKind = VK_LValue; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Decl::CXXConversion: case Decl::CXXDestructor: @@ -14961,7 +14961,7 @@ break; case BO_And: checkObjCPointerIntrospection(*this, LHS, RHS, OpLoc); - LLVM_FALLTHROUGH; + [[fallthrough]]; case BO_Xor: case BO_Or: ResultTy = CheckBitwiseOperands(LHS, RHS, OpLoc, Opc); @@ -15013,7 +15013,7 @@ case BO_AndAssign: case BO_OrAssign: // fallthrough DiagnoseSelfAssignment(*this, LHS.get(), RHS.get(), OpLoc, true); - LLVM_FALLTHROUGH; + [[fallthrough]]; case BO_XorAssign: CompResultTy = CheckBitwiseOperands(LHS, RHS, OpLoc, Opc); CompLHSTy = CompResultTy; diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -4817,7 +4817,7 @@ case UTT_HasTrivialDestructor: case UTT_HasVirtualDestructor: ArgTy = QualType(ArgTy->getBaseElementTypeUnsafe(), 0); - LLVM_FALLTHROUGH; + [[fallthrough]]; // C++1z [meta.unary.prop]: // T shall be a complete type, cv void, or an array of unknown bound. diff --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp --- a/clang/lib/Sema/SemaExprMember.cpp +++ b/clang/lib/Sema/SemaExprMember.cpp @@ -249,7 +249,7 @@ case IMA_Field_Uneval_Context: Diag(R.getNameLoc(), diag::warn_cxx98_compat_non_static_member_use) << R.getLookupNameInfo().getName(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case IMA_Static: case IMA_Abstract: case IMA_Mixed_StaticContext: diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -86,7 +86,7 @@ // char8_t array can be initialized with a UTF-8 string. if (ElemTy->isChar8Type()) return SIF_None; - LLVM_FALLTHROUGH; + [[fallthrough]]; case StringLiteral::Ordinary: // char array can be initialized with a narrow string. // Only allow char x[] = "foo"; not char x[] = L"foo"; @@ -7572,7 +7572,7 @@ case IndirectLocalPathEntry::VarInit: if (cast(Path[I].D)->isImplicit()) return SourceRange(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case IndirectLocalPathEntry::DefaultInit: return Path[I].E->getSourceRange(); @@ -8739,7 +8739,7 @@ << Step->Type << CurInit.get()->getType() << CurInit.get()->getSourceRange(); updateGNUCompoundLiteralRValue(CurInit.get()); - LLVM_FALLTHROUGH; + [[fallthrough]]; case SK_ArrayInit: // If the destination type is an incomplete array type, update the // type accordingly. @@ -9201,7 +9201,7 @@ << Args[0]->getSourceRange(); break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case FK_NonConstLValueReferenceBindingToUnrelated: S.Diag(Kind.getLocation(), diff --git a/clang/lib/Sema/SemaLambda.cpp b/clang/lib/Sema/SemaLambda.cpp --- a/clang/lib/Sema/SemaLambda.cpp +++ b/clang/lib/Sema/SemaLambda.cpp @@ -335,7 +335,7 @@ if (!IsInNonspecializedTemplate) return std::make_tuple(nullptr, ManglingContextDecl); // Fall through to get the current context. - LLVM_FALLTHROUGH; + [[fallthrough]]; case DataMember: // -- the in-class initializers of class members diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -3142,7 +3142,7 @@ for (const auto &Arg : Proto->param_types()) Queue.push_back(Arg.getTypePtr()); // fallthrough - LLVM_FALLTHROUGH; + [[fallthrough]]; } case Type::FunctionNoProto: { const FunctionType *FnType = cast(T); diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -12279,7 +12279,7 @@ case OMPC_write: case OMPC_update: MutexClauseEncountered = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPC_capture: case OMPC_compare: { if (AtomicKind != OMPC_unknown && MutexClauseEncountered) { @@ -15168,7 +15168,7 @@ CaptureRegion = OMPD_parallel; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPD_target_parallel: case OMPD_target_parallel_for: case OMPD_target_parallel_loop: @@ -15183,7 +15183,7 @@ CaptureRegion = OMPD_parallel; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPD_target_teams_distribute_parallel_for: // If this clause applies to the nested 'parallel' region, capture within // the 'teams' region, otherwise do not capture. @@ -15196,7 +15196,7 @@ CaptureRegion = OMPD_parallel; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case OMPD_teams_distribute_parallel_for: CaptureRegion = OMPD_teams; break; diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -6241,7 +6241,7 @@ HadMultipleCandidates, ExplicitConversions)) return ExprError(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case OR_Deleted: // We'll complain below about a non-integral condition type. break; @@ -9311,7 +9311,7 @@ case OO_Plus: // '+' is either unary or binary if (Args.size() == 1) OpBuilder.addUnaryPlusPointerOverloads(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case OO_Minus: // '-' is either unary or binary if (Args.size() == 1) { @@ -9386,12 +9386,12 @@ case OO_Equal: OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case OO_PlusEqual: case OO_MinusEqual: OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal); - LLVM_FALLTHROUGH; + [[fallthrough]]; case OO_StarEqual: case OO_SlashEqual: diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -2660,7 +2660,7 @@ SemaRef.PDiag(diag::err_for_range_invalid) << BeginRange->getType() << BEFFound), SemaRef, OCD_AllCandidates, BeginRange); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Sema::FRS_DiagnosticIssued: for (NamedDecl *D : OldFound) { diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/lib/Sema/SemaStmtAsm.cpp @@ -330,7 +330,7 @@ if (RequireCompleteType(OutputExpr->getBeginLoc(), Exprs[i]->getType(), diag::err_dereference_incomplete_type)) return StmtError(); - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_output) diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -5085,7 +5085,7 @@ } } // fallthrough - LLVM_FALLTHROUGH; + [[fallthrough]]; } default: { // We have a template type parameter but the template argument @@ -8849,7 +8849,7 @@ return false; } // Fall through - LLVM_FALLTHROUGH; + [[fallthrough]]; case TSK_ExplicitInstantiationDeclaration: case TSK_ExplicitInstantiationDefinition: @@ -10750,7 +10750,7 @@ } // Fall through to create a dependent typename type, from which we can recover // better. - LLVM_FALLTHROUGH; + [[fallthrough]]; case LookupResult::NotFoundInCurrentInstantiation: // Okay, it's a member of an unknown instantiation. diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -1587,7 +1587,7 @@ // FIXME: Implement deduction in dependent case. if (P->isDependentType()) return Sema::TDK_Success; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Type::Builtin: case Type::VariableArray: case Type::Vector: @@ -1775,7 +1775,7 @@ switch (FPA->canThrow()) { case CT_Cannot: Noexcept = 1; - LLVM_FALLTHROUGH; + [[fallthrough]]; case CT_Can: // We give E in noexcept(E) the "deduced from array bound" treatment. @@ -5741,7 +5741,7 @@ cast(T)->getSizeExpr(), OnlyDeduced, Depth, Used); // Fall through to check the element type - LLVM_FALLTHROUGH; + [[fallthrough]]; case Type::ConstantArray: case Type::IncompleteArray: @@ -5851,7 +5851,7 @@ case Type::InjectedClassName: T = cast(T)->getInjectedSpecializationType(); - LLVM_FALLTHROUGH; + [[fallthrough]]; case Type::TemplateSpecialization: { const TemplateSpecializationType *Spec diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -864,7 +864,7 @@ // context, depending on what else is on the stack. if (isa(Active->Entity)) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case CodeSynthesisContext::DefaultFunctionArgumentInstantiation: case CodeSynthesisContext::ExceptionSpecInstantiation: case CodeSynthesisContext::ConstraintsCheck: diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -633,7 +633,7 @@ FD->getReturnType()->isLValueReferenceType()) { return false; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case Builtin::BImove: case Builtin::BImove_if_noexcept: // HACK: Super-old versions of libc++ (3.1 and earlier) provide diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -430,7 +430,7 @@ if (onlyBlockPointers) continue; - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorChunk::BlockPointer: result = &ptrChunk; @@ -1369,7 +1369,7 @@ } } - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclSpec::TST_int: { if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) { switch (DS.getTypeSpecWidth()) { @@ -3540,7 +3540,7 @@ !D.getNumTypeObjects() && D.getDeclSpec().getParsedSpecifiers() == DeclSpec::PQ_TypeSpecifier) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorContext::TemplateTypeArg: Error = 10; // Template type argument break; @@ -3565,7 +3565,7 @@ if (SemaRef.getLangOpts().CPlusPlus2b && IsCXXAutoType && !Auto->isDecltypeAuto()) break; // auto(x) - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorContext::TypeName: case DeclaratorContext::Association: Error = 15; // Generic @@ -3834,7 +3834,7 @@ case DeclaratorChunk::Paren: if (&C == &Paren) continue; - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorChunk::Pointer: StartsWithDeclaratorId = false; continue; @@ -4674,7 +4674,7 @@ case DeclaratorContext::TrailingReturn: case DeclaratorContext::TrailingReturnVar: isFunctionOrMethod = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorContext::Member: if (state.getDeclarator().isObjCIvar() && !isFunctionOrMethod) { @@ -4688,7 +4688,7 @@ break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case DeclaratorContext::File: case DeclaratorContext::KNRTypeList: { @@ -4843,7 +4843,7 @@ case CAMN_InnerPointers: if (NumPointersRemaining == 0) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; case CAMN_Yes: checkNullabilityConsistency(S, pointerKind, pointerLoc, pointerEndLoc); @@ -7714,7 +7714,7 @@ case EST_NoexceptTrue: case EST_NoThrow: // Exception spec doesn't conflict with nothrow, so don't warn. - LLVM_FALLTHROUGH; + [[fallthrough]]; case EST_Unparsed: case EST_Uninstantiated: case EST_DependentNoexcept: @@ -8443,7 +8443,7 @@ // clang, so revert to attribute-based handling for C. if (!state.getSema().getLangOpts().CPlusPlus) break; - LLVM_FALLTHROUGH; + [[fallthrough]]; FUNCTION_TYPE_ATTRS_CASELIST: attr.setUsedAsTypeAttr(); diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -1275,10 +1275,10 @@ switch (NumArgs) { case 3: Arg3 = Diag.getStringArg(2); - LLVM_FALLTHROUGH; + [[fallthrough]]; case 2: Arg2 = Diag.getStringArg(1); - LLVM_FALLTHROUGH; + [[fallthrough]]; case 1: Arg1 = Diag.getStringArg(0); } diff --git a/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp --- a/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp @@ -240,7 +240,7 @@ case DeadIncrement: BugType = "Dead increment"; - LLVM_FALLTHROUGH; + [[fallthrough]]; case Standard: if (!BugType) BugType = "Dead assignment"; os << "Value stored to '" << *V << "' is never read"; diff --git a/clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp --- a/clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp @@ -309,7 +309,7 @@ // If it's not a dereference, we don't care if it was reset to null // or that it is even a smart pointer. - LLVM_FALLTHROUGH; + [[fallthrough]]; case SK_NonStd: case SK_Safe: OS << "Object"; @@ -587,7 +587,7 @@ break; // We only care about the type if it's a dereference. - LLVM_FALLTHROUGH; + [[fallthrough]]; case SK_Unsafe: OS << " of type '" << RD->getQualifiedNameAsString() << "'"; break; diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp @@ -767,7 +767,7 @@ break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case DoNothing: return state; diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -1793,7 +1793,7 @@ } } // FALLTHROUGH - LLVM_FALLTHROUGH; + [[fallthrough]]; } case Stmt::CallExprClass: diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp --- a/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineC.cpp @@ -524,7 +524,7 @@ } // Explicitly proceed with default handler for this case cascade. } - LLVM_FALLTHROUGH; + [[fallthrough]]; // Various C++ casts that are not handled yet. case CK_ToUnion: case CK_MatrixCast: @@ -1001,7 +1001,7 @@ } case UO_Plus: assert(!U->isGLValue()); - LLVM_FALLTHROUGH; + [[fallthrough]]; case UO_Deref: case UO_Extension: { handleUOExtension(I, U, Bldr); diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp --- a/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp @@ -263,7 +263,7 @@ // a simple temporary. CallOpts = PreElideCallOpts; CallOpts.IsElidableCtorThatHasNotBeenElided = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; } case ConstructionContext::SimpleTemporaryObjectKind: { const auto *TCC = cast(CC); @@ -455,7 +455,7 @@ } // If we decided not to elide the constructor, proceed as if // it's a simple temporary. - LLVM_FALLTHROUGH; + [[fallthrough]]; } case ConstructionContext::SimpleTemporaryObjectKind: { const auto *TCC = cast(CC); @@ -620,7 +620,7 @@ ("This virtual base should have already been initialized by " "the most derived class!")); (void)OuterCtor; - LLVM_FALLTHROUGH; + [[fallthrough]]; } case CXXConstructExpr::CK_NonVirtualBase: // In C++17, classes with non-virtual bases may be aggregates, so they would @@ -640,7 +640,7 @@ CallOpts.IsCtorOrDtorWithImproperlyModeledTargetRegion = true; break; } - LLVM_FALLTHROUGH; + [[fallthrough]]; case CXXConstructExpr::CK_Delegating: { const CXXMethodDecl *CurCtor = cast(LCtx->getDecl()); Loc ThisPtr = getSValBuilder().getCXXThis(CurCtor, diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp --- a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp @@ -894,7 +894,7 @@ break; } case CE_CXXDeallocator: - LLVM_FALLTHROUGH; + [[fallthrough]]; case CE_CXXAllocator: if (Opts.MayInlineCXXAllocator) break; diff --git a/clang/lib/StaticAnalyzer/Core/RegionStore.cpp b/clang/lib/StaticAnalyzer/Core/RegionStore.cpp --- a/clang/lib/StaticAnalyzer/Core/RegionStore.cpp +++ b/clang/lib/StaticAnalyzer/Core/RegionStore.cpp @@ -1354,11 +1354,11 @@ case GFK_All: B = invalidateGlobalRegion(MemRegion::GlobalInternalSpaceRegionKind, Ex, Count, LCtx, B, Invalidated); - LLVM_FALLTHROUGH; + [[fallthrough]]; case GFK_SystemOnly: B = invalidateGlobalRegion(MemRegion::GlobalSystemSpaceRegionKind, Ex, Count, LCtx, B, Invalidated); - LLVM_FALLTHROUGH; + [[fallthrough]]; case GFK_None: break; } diff --git a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp --- a/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SValBuilder.cpp @@ -396,7 +396,7 @@ } } // FALLTHROUGH - LLVM_FALLTHROUGH; + [[fallthrough]]; } // If we don't have a special case, fall back to the AST's constant evaluator. diff --git a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp --- a/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp +++ b/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp @@ -544,7 +544,7 @@ case BO_LE: case BO_GE: op = BinaryOperator::reverseComparisonOp(op); - LLVM_FALLTHROUGH; + [[fallthrough]]; case BO_EQ: case BO_NE: case BO_Add: @@ -558,7 +558,7 @@ // (~0)>>a if (LHSValue.isAllOnes() && LHSValue.isSigned()) return evalCast(lhs, resultTy, QualType{}); - LLVM_FALLTHROUGH; + [[fallthrough]]; case BO_Shl: // 0<>a if (LHSValue == 0) @@ -570,7 +570,7 @@ // 0 % x == 0 if (LHSValue == 0) return makeZeroVal(resultTy); - LLVM_FALLTHROUGH; + [[fallthrough]]; default: return makeSymExprValNN(op, InputLHS, InputRHS, resultTy); } diff --git a/clang/utils/TableGen/NeonEmitter.cpp b/clang/utils/TableGen/NeonEmitter.cpp --- a/clang/utils/TableGen/NeonEmitter.cpp +++ b/clang/utils/TableGen/NeonEmitter.cpp @@ -817,19 +817,19 @@ break; case 'h': Kind = Float; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 's': ElementBitwidth = 16; break; case 'f': Kind = Float; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'i': ElementBitwidth = 32; break; case 'd': Kind = Float; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'l': ElementBitwidth = 64; break; diff --git a/clang/utils/TableGen/SveEmitter.cpp b/clang/utils/TableGen/SveEmitter.cpp --- a/clang/utils/TableGen/SveEmitter.cpp +++ b/clang/utils/TableGen/SveEmitter.cpp @@ -523,7 +523,7 @@ break; case 'c': Constant = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case 'p': Pointer = true; Bitwidth = ElementBitwidth;