Index: clang/lib/Sema/SemaExpr.cpp =================================================================== --- clang/lib/Sema/SemaExpr.cpp +++ clang/lib/Sema/SemaExpr.cpp @@ -14912,7 +14912,7 @@ if (SrcType->isObjCQualifiedIdType()) { const ObjCObjectPointerType *srcOPT = SrcType->castAs(); - for (auto *srcProto : srcOPT->quals()) { + for (auto *srcProto : srcOPT->quals()) { // XXX PDecl = srcProto; break; } @@ -14924,7 +14924,7 @@ const ObjCObjectPointerType *dstOPT = DstType->castAs(); for (auto *dstProto : dstOPT->quals()) { - PDecl = dstProto; + PDecl = dstProto; // XXX break; } if (const ObjCInterfaceType *IFaceT = Index: clang/lib/Serialization/ASTReader.cpp =================================================================== --- clang/lib/Serialization/ASTReader.cpp +++ clang/lib/Serialization/ASTReader.cpp @@ -3953,10 +3953,11 @@ // Check any additional module map files that are in the pcm, but not // found in header search. Cases that match are already removed. for (const FileEntry *ModMap : AdditionalStoredMaps) { - if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) + if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) { Diag(diag::err_module_different_modmap) << F.ModuleName << /*not new*/1 << ModMap->getName(); - return OutOfDate; + return OutOfDate; + } } } Index: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -445,8 +445,8 @@ objcIvarRefExpr(hasDeclaration(equalsNode(Ivar))).bind(IvarBind)))); StatementMatcher ParentM = stmt(hasDescendant(WriteIntoIvarM)); auto Matches = match(ParentM, *Parent->getBody(), Parent->getASTContext()); - for (BoundNodes &Match : Matches) { - auto IvarRef = Match.getNodeAs(IvarBind); + if (!Matches.empty()) { + auto IvarRef = Matches.first().getNodeAs(IvarBind); if (IvarRef->isFreeIvar()) return true; Index: clang/lib/StaticAnalyzer/Core/ExprEngine.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -3171,9 +3171,10 @@ /*Title=*/"Exploded Graph", /*Filename=*/std::string(Filename)); } -#endif +#else llvm::errs() << "Warning: dumping graph requires assertions" << "\n"; return ""; +#endif } std::string ExprEngine::DumpGraph(ArrayRef Nodes, Index: clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp =================================================================== --- clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp +++ clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp @@ -171,12 +171,13 @@ } bool checkIfOverriddenFunctionAscends(const CXXMethodDecl *MethodDecl) { - for (const auto &OverriddenMethod : MethodDecl->overridden_methods()) { - if (USRSet.find(getUSRForDecl(OverriddenMethod)) != USRSet.end()) - return true; - return checkIfOverriddenFunctionAscends(OverriddenMethod); - } - return false; + ASTContext::overridden_methods_range OverriddenMethods = + MethodDecl->overridden_methods(); + if (range.empty()) + return false; + if (USRSet.find(getUSRForDecl(*OverriddenMethods->begin())) != USRSet.end()) + return true; + return checkIfOverriddenFunctionAscends(*OverriddenMethods->begin()); } const Decl *FoundDecl; Index: llvm/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/cmake/modules/HandleLLVMOptions.cmake +++ llvm/cmake/modules/HandleLLVMOptions.cmake @@ -658,6 +658,10 @@ "-Wnon-virtual-dtor" CMAKE_CXX_FLAGS) endif() + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + append("-Wunreachable-code" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + endif() + # Enable -Wdelete-non-virtual-dtor if available. add_flag_if_supported("-Wdelete-non-virtual-dtor" DELETE_NON_VIRTUAL_DTOR_FLAG) Index: llvm/include/llvm/TextAPI/MachO/InterfaceFile.h =================================================================== --- llvm/include/llvm/TextAPI/MachO/InterfaceFile.h +++ llvm/include/llvm/TextAPI/MachO/InterfaceFile.h @@ -278,11 +278,6 @@ return ParentUmbrellas; } - /// Get the parent umbrella framework. - const std::vector> getParentUmbrellas() const { - return ParentUmbrellas; - } - /// Add an allowable client. /// /// Mach-O Dynamic libraries have the concept of allowable clients that are Index: llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp =================================================================== --- llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp +++ llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp @@ -537,6 +537,7 @@ return false; // Loop through the basic block until we find one of the instructions. + // XXX what MachineBasicBlock::const_iterator I = DefMI.getParent()->begin(); for (; &*I != &DefMI && &*I != &UseMI; ++I) return &*I == &DefMI; Index: llvm/lib/CodeGen/MachineVerifier.cpp =================================================================== --- llvm/lib/CodeGen/MachineVerifier.cpp +++ llvm/lib/CodeGen/MachineVerifier.cpp @@ -1554,9 +1554,10 @@ case TargetOpcode::STATEPOINT: if (!MI->getOperand(StatepointOpers::IDPos).isImm() || !MI->getOperand(StatepointOpers::NBytesPos).isImm() || - !MI->getOperand(StatepointOpers::NCallArgsPos).isImm()) + !MI->getOperand(StatepointOpers::NCallArgsPos).isImm()) { report("meta operands to STATEPOINT not constant!", MI); - break; + break; + } auto VerifyStackMapConstant = [&](unsigned Offset) { if (!MI->getOperand(Offset).isImm() || Index: llvm/lib/DebugInfo/DWARF/DWARFContext.cpp =================================================================== --- llvm/lib/DebugInfo/DWARF/DWARFContext.cpp +++ llvm/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -1931,14 +1931,10 @@ uint8_t DWARFContext::getCUAddrSize() { // In theory, different compile units may have different address byte // sizes, but for simplicity we just use the address byte size of the - // last compile unit. In practice the address size field is repeated across + // first compile unit. In practice the address size field is repeated across // various DWARF headers (at least in version 5) to make it easier to dump // them independently, not to enable varying the address size. - uint8_t Addr = 0; - for (const auto &CU : compile_units()) { - Addr = CU->getAddressByteSize(); - break; - } - return Addr; + unit_iterator_range CUs = compile_units(); + return CUs.empty() ? 0 : Addr = CUs->begin()->getAddressByteSize(); } Index: llvm/lib/Object/XCOFFObjectFile.cpp =================================================================== --- llvm/lib/Object/XCOFFObjectFile.cpp +++ llvm/lib/Object/XCOFFObjectFile.cpp @@ -330,7 +330,7 @@ uint64_t XCOFFObjectFile::getRelocationOffset(DataRefImpl Rel) const { llvm_unreachable("Not yet implemented!"); - uint64_t Result = 0; + uint64_t Result; return Result; } @@ -341,7 +341,7 @@ uint64_t XCOFFObjectFile::getRelocationType(DataRefImpl Rel) const { llvm_unreachable("Not yet implemented!"); - uint64_t Result = 0; + uint64_t Result; return Result; } Index: llvm/lib/TextAPI/MachO/TextStub.cpp =================================================================== --- llvm/lib/TextAPI/MachO/TextStub.cpp +++ llvm/lib/TextAPI/MachO/TextStub.cpp @@ -450,10 +450,8 @@ if (File->isInstallAPI()) Flags |= TBDFlags::InstallAPI; - for (const auto &Iter : File->umbrellas()) { - ParentUmbrella = Iter.second; - break; - } + if (!File->umbrellas().empty()) + ParentUmbrella = File->umbrellas()->begin().second; std::set ArchSet; for (const auto &Library : File->allowableClients()) Index: llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp =================================================================== --- llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp +++ llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp @@ -424,8 +424,8 @@ if (Instr != Parent->getFirstNonPHIOrDbg()) return false; - for (auto &BI : *Parent) { - if (PHINode *PN = dyn_cast(&BI)) { + if (!Parent->empty) { + if (PHINode *PN = dyn_cast(&Parent->first())) { for (auto &I : CS.args()) if (&*I == PN) { assert(PN->getNumIncomingValues() == 2 && @@ -439,7 +439,6 @@ return true; } } - break; } return false; } Index: llvm/tools/llvm-cvtres/llvm-cvtres.cpp =================================================================== --- llvm/tools/llvm-cvtres/llvm-cvtres.cpp +++ llvm/tools/llvm-cvtres/llvm-cvtres.cpp @@ -72,7 +72,8 @@ exit(1); } -static void reportError(StringRef Input, std::error_code EC) { +LLVM_ATTRIBUTE_NORETURN static void reportError( + StringRef Input, std::error_code EC) { reportError(Twine(Input) + ": " + EC.message() + ".\n"); } Index: llvm/tools/llvm-lipo/llvm-lipo.cpp =================================================================== --- llvm/tools/llvm-lipo/llvm-lipo.cpp +++ llvm/tools/llvm-lipo/llvm-lipo.cpp @@ -763,7 +763,6 @@ reportError("input file " + InputBinaries.front().getBinary()->getFileName() + " must be a fat file when the -extract option is specified"); - exit(EXIT_FAILURE); } SmallVector, 2> ExtractedObjects; Index: llvm/tools/llvm-mt/llvm-mt.cpp =================================================================== --- llvm/tools/llvm-mt/llvm-mt.cpp +++ llvm/tools/llvm-mt/llvm-mt.cpp @@ -69,7 +69,8 @@ exit(1); } -static void reportError(StringRef Input, std::error_code EC) { +LLVM_ATTRIBUTE_NORETURN static void reportError( + StringRef Input, std::error_code EC) { reportError(Twine(Input) + ": " + EC.message()); } Index: llvm/tools/llvm-objdump/MachODump.cpp =================================================================== --- llvm/tools/llvm-objdump/MachODump.cpp +++ llvm/tools/llvm-objdump/MachODump.cpp @@ -2415,7 +2415,6 @@ } else if (Error E = isNotObjectErrorInvalidFileType( ObjOrErr.takeError())) { reportError(std::move(E), "", Filename, ArchitectureName); - continue; } else if (Expected> AOrErr = I->getAsArchive()) { std::unique_ptr &A = *AOrErr; Index: llvm/utils/PerfectShuffle/PerfectShuffle.cpp =================================================================== --- llvm/utils/PerfectShuffle/PerfectShuffle.cpp +++ llvm/utils/PerfectShuffle/PerfectShuffle.cpp @@ -423,7 +423,7 @@ } std::cout << " 0\n};\n"; - if (0) { + LLVM_DEBUG({ // Print out the table. for (unsigned i = 0; i != 0x8889; ++i) { if (!isValidMask(i)) continue; @@ -440,7 +440,7 @@ std::cerr << "\n"; } } - } + }) } Index: llvm/utils/TableGen/CodeGenSchedule.cpp =================================================================== --- llvm/utils/TableGen/CodeGenSchedule.cpp +++ llvm/utils/TableGen/CodeGenSchedule.cpp @@ -1082,11 +1082,11 @@ for (Record *RWD : RWDefs) { if (RWD->getValueAsDef("SchedModel") == RWModelDef && RWModelDef->getValueAsBit("FullInstRWOverlapCheck")) { - for (Record *Inst : InstDefs) { + if (!InstDefs.empty()) { PrintFatalError (InstRWDef->getLoc(), "Overlapping InstRW definition for \"" + - Inst->getName() + + InstDefs.first().getName() + "\" also matches previous \"" + RWD->getValue("Instrs")->getValue()->getAsString() + "\"."); @@ -1118,11 +1118,11 @@ Record *RWModelDef = InstRWDef->getValueAsDef("SchedModel"); for (Record *OldRWDef : SchedClasses[OldSCIdx].InstRWs) { if (OldRWDef->getValueAsDef("SchedModel") == RWModelDef) { - for (Record *InstDef : InstDefs) { + if (!InstDefs.empty()) { PrintFatalError (InstRWDef->getLoc(), "Overlapping InstRW definition for \"" + - InstDef->getName() + + InstDefs.first().getName() + "\" also matches previous \"" + OldRWDef->getValue("Instrs")->getValue()->getAsString() + "\".");