From: David Blaikie Date: Tue, 17 Jan 2012 06:56:22 +0000 (+0000) Subject: Remove unreachable code in Clang. (replace with llvm_unreachable where appropriate... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7530c034c0c71a64c5a9173206d9742ae847af8b;p=clang Remove unreachable code in Clang. (replace with llvm_unreachable where appropriate or when GCC requires it) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148292 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Sema/DeclSpec.h b/include/clang/Sema/DeclSpec.h index 6a180e85ae..c4a96e1a3e 100644 --- a/include/clang/Sema/DeclSpec.h +++ b/include/clang/Sema/DeclSpec.h @@ -1747,7 +1747,6 @@ public: return !DeclTypeInfo[i].Arr.NumElts; } llvm_unreachable("Invalid type chunk"); - return false; } return false; } @@ -1772,7 +1771,6 @@ public: return false; } llvm_unreachable("Invalid type chunk"); - return false; } return false; } diff --git a/include/clang/Sema/Overload.h b/include/clang/Sema/Overload.h index 24adce8f35..3fcc56790c 100644 --- a/include/clang/Sema/Overload.h +++ b/include/clang/Sema/Overload.h @@ -469,7 +469,7 @@ namespace clang { return 3; } - return 3; + llvm_unreachable("Invalid ImplicitConversionSequence::Kind!"); } bool isBad() const { return getKind() == BadConversion; } diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index 24ccba1b25..8b0075fc77 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -4846,7 +4846,7 @@ public: } - return true; + llvm_unreachable("Invalid InstantiationKind!"); } friend bool operator!=(const ActiveTemplateInstantiation &X, diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index e145eecf42..9079dbe271 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -193,7 +193,7 @@ CXXABI *ASTContext::createCXXABI(const TargetInfo &T) { case CXXABI_Microsoft: return CreateMicrosoftCXXABI(*this); } - return 0; + llvm_unreachable("Invalid CXXABI type!"); } static const LangAS::Map *getAddressSpaceMap(const TargetInfo &T, @@ -833,7 +833,6 @@ ASTContext::getTypeInfo(const Type *T) const { #define DEPENDENT_TYPE(Class, Base) case Type::Class: #include "clang/AST/TypeNodes.def" llvm_unreachable("Should not see dependent types"); - break; case Type::FunctionNoProto: case Type::FunctionProto: @@ -3407,8 +3406,7 @@ ASTContext::getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const { return NNS; } - // Required to silence a GCC warning - return 0; + llvm_unreachable("Invalid NestedNameSpecifier::Kind!"); } @@ -6087,7 +6085,7 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS, LHS->getAs(), RHS->getAs(), BlockReturnType)) - return LHS; + return LHS; return QualType(); } if (canAssignObjCInterfaces(LHS->getAs(), @@ -6095,10 +6093,10 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS, return LHS; return QualType(); - } + } } - return QualType(); + llvm_unreachable("Invalid Type::Class!"); } bool ASTContext::FunctionTypesMatchOnNSConsumedAttrs( @@ -6613,7 +6611,7 @@ GVALinkage ASTContext::GetGVALinkageForVariable(const VarDecl *VD) { } } - return GVA_StrongExternal; + llvm_unreachable("Invalid Linkage!"); } bool ASTContext::DeclMustBeEmitted(const Decl *D) { diff --git a/lib/Basic/IdentifierTable.cpp b/lib/Basic/IdentifierTable.cpp index c191456b1e..a76a363912 100644 --- a/lib/Basic/IdentifierTable.cpp +++ b/lib/Basic/IdentifierTable.cpp @@ -19,6 +19,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/ErrorHandling.h" #include using namespace clang; @@ -503,5 +504,5 @@ const char *clang::getOperatorSpelling(OverloadedOperatorKind Operator) { #include "clang/Basic/OperatorKinds.def" } - return 0; + llvm_unreachable("Invalid OverloadedOperatorKind!"); } diff --git a/lib/Basic/Module.cpp b/lib/Basic/Module.cpp index c5bc86de81..ff09441802 100644 --- a/lib/Basic/Module.cpp +++ b/lib/Basic/Module.cpp @@ -72,7 +72,6 @@ Module::isAvailable(const LangOptions &LangOpts, StringRef &Feature) const { } llvm_unreachable("could not find a reason why module is unavailable"); - return false; } bool Module::isSubModuleOf(Module *Other) const { diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index b6c07567a9..9ba743c31f 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -2103,7 +2103,6 @@ X86TargetInfo::validateAsmConstraint(const char *&Name, // x86_64 instructions. return true; } - return false; } @@ -3397,7 +3396,6 @@ public: Info.setAllowsRegister(); return true; } - return false; } virtual const char *getClobbers() const { diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index 6d2d72fc22..7af7c93b7b 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -799,8 +799,6 @@ bool HeaderSearch::hasModuleMap(StringRef FileName, // having module maps if we eventually do find a module map. FixUpDirectories.push_back(Dir); } while (true); - - return false; } Module *HeaderSearch::findModuleForHeader(const FileEntry *File) { diff --git a/lib/Lex/ModuleMap.cpp b/lib/Lex/ModuleMap.cpp index 745ebc4d8b..08a1e23d10 100644 --- a/lib/Lex/ModuleMap.cpp +++ b/lib/Lex/ModuleMap.cpp @@ -1263,8 +1263,6 @@ bool ModuleMapParser::parseModuleMapFile() { break; } } while (true); - - return HadError; } bool ModuleMap::parseModuleMapFile(const FileEntry *File) { diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index 4379b6bad1..76955604b0 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -1370,7 +1370,6 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, default: llvm_unreachable("unknown include directive kind"); - break; } // Determine whether we are actually building the module that this diff --git a/lib/Lex/PPExpressions.cpp b/lib/Lex/PPExpressions.cpp index 20f624a0bb..4ce48e003c 100644 --- a/lib/Lex/PPExpressions.cpp +++ b/lib/Lex/PPExpressions.cpp @@ -703,8 +703,6 @@ static bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, LHS.Val = Res; LHS.setEnd(RHS.getRange().getEnd()); } - - return false; } /// EvaluateDirectiveExpression - Evaluate an integer constant expression that diff --git a/lib/Lex/PreprocessingRecord.cpp b/lib/Lex/PreprocessingRecord.cpp index 770a69d19b..6c36e73ad3 100644 --- a/lib/Lex/PreprocessingRecord.cpp +++ b/lib/Lex/PreprocessingRecord.cpp @@ -390,7 +390,6 @@ void PreprocessingRecord::InclusionDirective( default: llvm_unreachable("Unknown include directive kind"); - return; } clang::InclusionDirective *ID diff --git a/lib/Lex/TokenConcatenation.cpp b/lib/Lex/TokenConcatenation.cpp index dc6d686d6c..335d864f3f 100644 --- a/lib/Lex/TokenConcatenation.cpp +++ b/lib/Lex/TokenConcatenation.cpp @@ -179,11 +179,9 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevPrevTok, switch (PrevKind) { default: llvm_unreachable("InitAvoidConcatTokenInfo built wrong"); - return true; case tok::raw_identifier: llvm_unreachable("tok::raw_identifier in non-raw lexing mode!"); - return true; case tok::identifier: // id+id or id+number or id+L"foo". // id+'.'... will not append. diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index 3ecdae2978..3f4f4611fd 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -42,7 +42,6 @@ Parser::DeclGroupPtrTy Parser::ParseObjCAtDirectives() { switch (Tok.getObjCKeywordID()) { case tok::objc_class: return ParseObjCAtClassDeclaration(AtLoc); - break; case tok::objc_interface: { ParsedAttributes attrs(AttrFactory); SingleDecl = ParseObjCAtInterfaceDeclaration(AtLoc, attrs); @@ -426,7 +425,6 @@ void Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, if (Tok.is(tok::code_completion)) { Actions.CodeCompleteObjCAtDirective(getCurScope()); return cutOffParsing(); - break; } tok::ObjCKeywordKind DirectiveKind = Tok.getObjCKeywordID(); diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index fadf34fc4f..cd467dd720 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -1934,8 +1934,6 @@ bool Parser::ParseAsmOperandsOpt(SmallVectorImpl &Names, if (Tok.isNot(tok::comma)) return false; ConsumeToken(); } - - return true; } Decl *Parser::ParseFunctionStatementBody(Decl *Decl, ParseScope &BodyScope) { @@ -2203,7 +2201,6 @@ void Parser::ParseMicrosoftIfExistsStatement(StmtVector &Stmts) { case IEB_Dependent: llvm_unreachable("Dependent case handled above"); - break; case IEB_Skip: Braces.skipToEnd(); diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index db9460bca4..501e50c1e7 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -581,7 +581,6 @@ Parser::ParseExternalDeclaration(ParsedAttributesWithRange &attrs, } case tok::at: return ParseObjCAtDirectives(); - break; case tok::minus: case tok::plus: if (!getLang().ObjC1) { diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp index ba39602d16..ed4974b50e 100644 --- a/lib/Rewrite/HTMLRewrite.cpp +++ b/lib/Rewrite/HTMLRewrite.cpp @@ -381,7 +381,6 @@ void html::SyntaxHighlight(Rewriter &R, FileID FID, const Preprocessor &PP) { default: break; case tok::identifier: llvm_unreachable("tok::identifier in raw lexing mode!"); - break; case tok::raw_identifier: { // Fill in Result.IdentifierInfo and update the token kind, // looking up the identifier in the identifier table. diff --git a/lib/Sema/CodeCompleteConsumer.cpp b/lib/Sema/CodeCompleteConsumer.cpp index 80496c5c44..f1a6392769 100644 --- a/lib/Sema/CodeCompleteConsumer.cpp +++ b/lib/Sema/CodeCompleteConsumer.cpp @@ -71,8 +71,8 @@ bool CodeCompletionContext::wantConstructorResults() const { case CCC_ObjCCategoryName: return false; } - - return false; + + llvm_unreachable("Invalid CodeCompletionContext::Kind!"); } //===----------------------------------------------------------------------===// @@ -93,7 +93,6 @@ CodeCompletionString::Chunk::Chunk(ChunkKind Kind, const char *Text) case CK_Optional: llvm_unreachable("Optional strings cannot be created from text"); - break; case CK_LeftParen: this->Text = "("; @@ -330,8 +329,8 @@ CodeCompleteConsumer::OverloadCandidate::getFunctionType() const { case CK_FunctionType: return Type; } - - return 0; + + llvm_unreachable("Invalid CandidateKind!"); } //===----------------------------------------------------------------------===// diff --git a/lib/Sema/DeclSpec.cpp b/lib/Sema/DeclSpec.cpp index 2b5efc692f..11818f6fa2 100644 --- a/lib/Sema/DeclSpec.cpp +++ b/lib/Sema/DeclSpec.cpp @@ -245,7 +245,6 @@ bool Declarator::isDeclarationOfFunction() const { return false; } llvm_unreachable("Invalid type chunk"); - return false; } switch (DS.getTypeSpecType()) { @@ -295,8 +294,8 @@ bool Declarator::isDeclarationOfFunction() const { return QT->isFunctionType(); } } - - return false; + + llvm_unreachable("Invalid TypeSpecType!"); } /// getParsedSpecifiers - Return a bitmask of which flavors of specifiers this diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp index e1322ed8a2..6014b9b47f 100644 --- a/lib/Sema/SemaAccess.cpp +++ b/lib/Sema/SemaAccess.cpp @@ -797,7 +797,6 @@ static AccessResult HasAccess(Sema &S, // Silence bogus warnings llvm_unreachable("impossible friendship kind"); - return OnFailure; } /// Finds the best path from the naming class to the declaring class, @@ -1068,7 +1067,6 @@ static void DiagnoseAccessPath(Sema &S, case AR_dependent: llvm_unreachable("can't diagnose dependent access failures"); - return; } } @@ -1298,7 +1296,6 @@ static AccessResult CheckEffectiveAccess(Sema &S, // silence unnecessary warning llvm_unreachable("invalid access result"); - return AR_accessible; } static Sema::AccessResult CheckAccess(Sema &S, SourceLocation Loc, @@ -1333,7 +1330,6 @@ static Sema::AccessResult CheckAccess(Sema &S, SourceLocation Loc, case AR_dependent: return Sema::AR_dependent; } llvm_unreachable("falling off end"); - return Sema::AR_accessible; } void Sema::HandleDelayedAccessCheck(DelayedDiagnostic &DD, Decl *decl) { diff --git a/lib/Sema/SemaCXXScopeSpec.cpp b/lib/Sema/SemaCXXScopeSpec.cpp index 31e33dda08..1ad50434db 100644 --- a/lib/Sema/SemaCXXScopeSpec.cpp +++ b/lib/Sema/SemaCXXScopeSpec.cpp @@ -150,14 +150,13 @@ DeclContext *Sema::computeDeclContext(const CXXScopeSpec &SS, const TagType *Tag = NNS->getAsType()->getAs(); assert(Tag && "Non-tag type in nested-name-specifier"); return Tag->getDecl(); - } break; + } case NestedNameSpecifier::Global: return Context.getTranslationUnitDecl(); } - // Required to silence a GCC warning. - return 0; + llvm_unreachable("Invalid NestedNameSpecifier::Kind!"); } bool Sema::isDependentScopeSpecifier(const CXXScopeSpec &SS) { @@ -899,8 +898,7 @@ bool Sema::ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS) { return true; } - // Silence bogus warning. - return false; + llvm_unreachable("Invalid NestedNameSpecifier::Kind!"); } /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global diff --git a/lib/Sema/SemaCast.cpp b/lib/Sema/SemaCast.cpp index fe7667e93b..2420424bf2 100644 --- a/lib/Sema/SemaCast.cpp +++ b/lib/Sema/SemaCast.cpp @@ -295,8 +295,6 @@ Sema::BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind, OpLoc, Parens.getEnd())); } } - - return ExprError(); } /// Try to diagnose a failed overloaded cast. Returns true if @@ -346,7 +344,6 @@ static bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, switch (sequence.getFailedOverloadResult()) { case OR_Success: llvm_unreachable("successful failed overload"); - return false; case OR_No_Viable_Function: if (candidates.empty()) msg = diag::err_ovl_no_conversion_in_cast; diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index af0eedd791..e94aa2ffce 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -342,7 +342,7 @@ static unsigned RFT(unsigned t, bool shift = false) { assert(!shift && "cannot shift float types!"); return (2 << IsQuad) - 1; } - return 0; + llvm_unreachable("Invalid NeonTypeFlag!"); } /// getNeonEltType - Return the QualType corresponding to the elements of @@ -367,7 +367,7 @@ static QualType getNeonEltType(NeonTypeFlags Flags, ASTContext &Context) { case NeonTypeFlags::Float32: return Context.FloatTy; } - return QualType(); + llvm_unreachable("Invalid NeonTypeFlag!"); } bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index c280ac2990..730dde8c9e 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -596,8 +596,7 @@ SimplifiedTypeClass clang::getSimplifiedTypeClass(CanQualType T) { default: return STC_Arithmetic; } - return STC_Other; - + case Type::Complex: return STC_Arithmetic; @@ -1370,8 +1369,8 @@ static bool WantTypesInContext(Sema::ParserCompletionContext CCC, case Sema::PCC_ForInit: return LangOpts.CPlusPlus || LangOpts.ObjC1 || LangOpts.C99; } - - return false; + + llvm_unreachable("Invalid ParserCompletionContext!"); } static PrintingPolicy getCompletionPrintingPolicy(const ASTContext &Context, @@ -2793,7 +2792,7 @@ CXCursorKind clang::getCursorKindForDecl(Decl *D) { case Decl::ObjCCategory: return CXCursor_ObjCCategoryDecl; case Decl::ObjCCategoryImpl: return CXCursor_ObjCCategoryImplDecl; // FIXME - return CXCursor_UnexposedDecl; + // return CXCursor_UnexposedDecl; case Decl::ObjCImplementation: return CXCursor_ObjCImplementationDecl; case Decl::ObjCInterface: @@ -2847,7 +2846,6 @@ CXCursorKind clang::getCursorKindForDecl(Decl *D) { case ObjCPropertyImplDecl::Synthesize: return CXCursor_ObjCSynthesizeDecl; } - break; default: if (TagDecl *TD = dyn_cast(D)) { @@ -2926,10 +2924,9 @@ static enum CodeCompletionContext::Kind mapCodeCompletionContext(Sema &S, case Sema::PCC_MemberTemplate: if (S.CurContext->isFileContext()) return CodeCompletionContext::CCC_TopLevel; - else if (S.CurContext->isRecord()) + if (S.CurContext->isRecord()) return CodeCompletionContext::CCC_ClassStructUnion; - else - return CodeCompletionContext::CCC_Other; + return CodeCompletionContext::CCC_Other; case Sema::PCC_RecoveryInFunction: return CodeCompletionContext::CCC_Recovery; @@ -2957,8 +2954,8 @@ static enum CodeCompletionContext::Kind mapCodeCompletionContext(Sema &S, case Sema::PCC_LocalDeclarationSpecifiers: return CodeCompletionContext::CCC_Type; } - - return CodeCompletionContext::CCC_Other; + + llvm_unreachable("Invalid ParserCompletionContext!"); } /// \brief If we're in a C++ virtual member function, add completion results diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 43bdf3f930..ea736320f8 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -1105,7 +1105,6 @@ static bool hasEffectivelyInternalLinkage(NamedDecl *D) { return false; } llvm_unreachable("unknown linkage kind!"); - return false; } static void handleWeakRefAttr(Sema &S, Decl *D, const AttributeList &Attr) { @@ -3007,7 +3006,6 @@ static void handleCallConvAttr(Sema &S, Decl *D, const AttributeList &Attr) { } default: llvm_unreachable("unexpected attribute kind"); - return; } } @@ -3056,7 +3054,7 @@ bool Sema::CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC) { } // FALLS THROUGH } - default: llvm_unreachable("unexpected attribute kind"); return true; + default: llvm_unreachable("unexpected attribute kind"); } return false; @@ -3242,7 +3240,7 @@ static void handleNSReturnsRetainedAttr(Sema &S, Decl *D, bool typeOK; bool cf; switch (Attr.getKind()) { - default: llvm_unreachable("invalid ownership attribute"); return; + default: llvm_unreachable("invalid ownership attribute"); case AttributeList::AT_ns_returns_autoreleased: case AttributeList::AT_ns_returns_retained: case AttributeList::AT_ns_returns_not_retained: diff --git a/lib/Sema/SemaExceptionSpec.cpp b/lib/Sema/SemaExceptionSpec.cpp index 92af2d914b..eb7be5d728 100644 --- a/lib/Sema/SemaExceptionSpec.cpp +++ b/lib/Sema/SemaExceptionSpec.cpp @@ -611,10 +611,8 @@ bool Sema::CheckExceptionSpecSubset( case AR_inaccessible: continue; case AR_dependent: llvm_unreachable("access check dependent for unprivileged context"); - break; case AR_delayed: llvm_unreachable("access check delayed in non-declaration"); - break; } Contained = true; diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 741ca9edd0..26ca3a9cc0 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -2392,13 +2392,11 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, case Decl::type: #include "clang/AST/DeclNodes.inc" llvm_unreachable("invalid value decl kind"); - return ExprError(); // These shouldn't make it here. case Decl::ObjCAtDefsField: case Decl::ObjCIvar: llvm_unreachable("forming non-member reference to ivar?"); - return ExprError(); // Enum constants are always r-values and never references. // Unresolved using declarations are dependent. @@ -2519,7 +2517,6 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, } llvm_unreachable("unknown capture result"); - return ExprError(); } ExprResult Sema::ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind) { @@ -4090,12 +4087,10 @@ CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { case Type::STK_ObjCObjectPointer: if (SrcKind == Type::STK_ObjCObjectPointer) return CK_BitCast; - else if (SrcKind == Type::STK_CPointer) + if (SrcKind == Type::STK_CPointer) return CK_CPointerToObjCPointerCast; - else { - maybeExtendBlockObject(*this, Src); - return CK_BlockPointerToObjCPointerCast; - } + maybeExtendBlockObject(*this, Src); + return CK_BlockPointerToObjCPointerCast; case Type::STK_Bool: return CK_PointerToBoolean; case Type::STK_Integral: @@ -4106,7 +4101,7 @@ CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { case Type::STK_MemberPointer: llvm_unreachable("illegal cast from pointer"); } - break; + llvm_unreachable("Should have returned before this"); case Type::STK_Bool: // casting from bool is like casting from an integer case Type::STK_Integral: @@ -4137,7 +4132,7 @@ CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { case Type::STK_MemberPointer: llvm_unreachable("member pointer type in C"); } - break; + llvm_unreachable("Should have returned before this"); case Type::STK_Floating: switch (DestTy->getScalarTypeKind()) { @@ -4164,7 +4159,7 @@ CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { case Type::STK_MemberPointer: llvm_unreachable("member pointer type in C"); } - break; + llvm_unreachable("Should have returned before this"); case Type::STK_FloatingComplex: switch (DestTy->getScalarTypeKind()) { @@ -4193,7 +4188,7 @@ CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { case Type::STK_MemberPointer: llvm_unreachable("member pointer type in C"); } - break; + llvm_unreachable("Should have returned before this"); case Type::STK_IntegralComplex: switch (DestTy->getScalarTypeKind()) { @@ -4222,7 +4217,7 @@ CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { case Type::STK_MemberPointer: llvm_unreachable("member pointer type in C"); } - break; + llvm_unreachable("Should have returned before this"); } llvm_unreachable("Unhandled scalar cast"); @@ -7201,7 +7196,6 @@ static bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) { case Expr::MLV_ReadonlyProperty: case Expr::MLV_NoSetterProperty: llvm_unreachable("readonly properties should be processed differently"); - break; case Expr::MLV_InvalidMessageExpression: Diag = diag::error_readonly_message_assignment; break; @@ -9924,7 +9918,6 @@ namespace { ExprResult VisitStmt(Stmt *S) { llvm_unreachable("unexpected statement!"); - return ExprError(); } ExprResult VisitExpr(Expr *E) { @@ -10017,7 +10010,6 @@ namespace { ExprResult VisitStmt(Stmt *S) { llvm_unreachable("unexpected statement!"); - return ExprError(); } ExprResult VisitExpr(Expr *E) { diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 6476f4a512..fceb639807 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -4786,8 +4786,8 @@ Sema::CheckMicrosoftIfExistsSymbol(Scope *S, case LookupResult::NotFoundInCurrentInstantiation: return IER_Dependent; } - - return IER_DoesNotExist; + + llvm_unreachable("Invalid LookupResult Kind!"); } Sema::IfExistsResult diff --git a/lib/Sema/SemaExprMember.cpp b/lib/Sema/SemaExprMember.cpp index 0080156376..fb0fc34cf7 100644 --- a/lib/Sema/SemaExprMember.cpp +++ b/lib/Sema/SemaExprMember.cpp @@ -238,7 +238,6 @@ Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, } llvm_unreachable("unexpected instance member access kind"); - return ExprError(); } /// Check an ext-vector component access expression. diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index cd8505932b..8a4f683049 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -2327,8 +2327,7 @@ DeclarationName InitializedEntity::getName() const { return DeclarationName(); } - // Silence GCC warning - return DeclarationName(); + llvm_unreachable("Invalid EntityKind!"); } DeclaratorDecl *InitializedEntity::getDecl() const { @@ -2353,8 +2352,7 @@ DeclaratorDecl *InitializedEntity::getDecl() const { return 0; } - // Silence GCC warning - return 0; + llvm_unreachable("Invalid EntityKind!"); } bool InitializedEntity::allowsNRVO() const { @@ -2456,7 +2454,7 @@ bool InitializationSequence::isAmbiguous() const { return FailedOverloadResult == OR_Ambiguous; } - return false; + llvm_unreachable("Invalid EntityKind!"); } bool InitializationSequence::isConstructorInitialization() const { @@ -4263,7 +4261,7 @@ getAssignmentAction(const InitializedEntity &Entity) { return Sema::AA_Initializing; } - return Sema::AA_Converting; + llvm_unreachable("Invalid EntityKind!"); } /// \brief Whether we should binding a created object as a temporary when @@ -5356,7 +5354,6 @@ bool InitializationSequence::Diagnose(Sema &S, case OR_Success: llvm_unreachable("Conversion did not fail!"); - break; } break; @@ -5541,9 +5538,7 @@ bool InitializationSequence::Diagnose(Sema &S, case OR_Success: llvm_unreachable("Conversion did not fail!"); - break; } - break; } case FK_DefaultInitOfConst: diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 8281597e29..d14bf904df 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -2762,7 +2762,8 @@ IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, User.After.setFromType(ThisType->getAs()->getPointeeType()); User.After.setAllToTypes(ToType); return OR_Success; - } else if (CXXConversionDecl *Conversion + } + if (CXXConversionDecl *Conversion = dyn_cast(Best->Function)) { S.MarkDeclarationReferenced(From->getLocStart(), Conversion); @@ -2789,10 +2790,8 @@ IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, // 13.3.3.1). User.After = Best->FinalConversion; return OR_Success; - } else { - llvm_unreachable("Not a constructor or conversion function?"); - return OR_No_Viable_Function; } + llvm_unreachable("Not a constructor or conversion function?"); case OR_No_Viable_Function: return OR_No_Viable_Function; @@ -2804,7 +2803,7 @@ IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType, return OR_Ambiguous; } - return OR_No_Viable_Function; + llvm_unreachable("Invalid OverloadResult!"); } bool @@ -2852,7 +2851,7 @@ CompareImplicitConversionSequences(Sema &S, // from any other user-defined conversion sequence. if (ICS1.getKindRank() < ICS2.getKindRank()) return ImplicitConversionSequence::Better; - else if (ICS2.getKindRank() < ICS1.getKindRank()) + if (ICS2.getKindRank() < ICS1.getKindRank()) return ImplicitConversionSequence::Worse; // The following checks require both conversion sequences to be of @@ -3664,7 +3663,7 @@ FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS, return false; } - return false; + llvm_unreachable("Invalid OverloadResult!"); } /// \brief Compute an implicit conversion sequence for reference @@ -8993,7 +8992,6 @@ Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc, ExecConfig); } - break; } // Overload resolution failed. @@ -10422,7 +10420,6 @@ Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found, } llvm_unreachable("Invalid reference to overloaded function"); - return E; } ExprResult Sema::FixOverloadedFunctionReference(ExprResult E, diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 35022be1a3..f58e965934 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -502,7 +502,6 @@ static TemplateArgumentLoc translateTemplateArgument(Sema &SemaRef, } llvm_unreachable("Unhandled parsed template argument"); - return TemplateArgumentLoc(); } /// \brief Translates template arguments as provided by the parser @@ -1139,7 +1138,7 @@ static bool DiagnoseDefaultTemplateArgument(Sema &S, // declaration (and it is a definition). Strange! } - return false; + llvm_unreachable("Invalid TemplateParamListContext!"); } /// \brief Check for unexpanded parameter packs within the template parameters @@ -2789,7 +2788,6 @@ bool Sema::CheckTemplateArgument(NamedDecl *Param, case TemplateArgument::Pack: llvm_unreachable("Caller must expand template argument packs"); - break; } return false; @@ -2839,17 +2837,12 @@ bool Sema::CheckTemplateArgument(NamedDecl *Param, return true; case TemplateArgument::Declaration: - llvm_unreachable( - "Declaration argument with template template parameter"); - break; + llvm_unreachable("Declaration argument with template template parameter"); case TemplateArgument::Integral: - llvm_unreachable( - "Integral argument with template template parameter"); - break; + llvm_unreachable("Integral argument with template template parameter"); case TemplateArgument::Pack: llvm_unreachable("Caller must expand template argument packs"); - break; } return false; @@ -3306,7 +3299,7 @@ bool UnnamedLocalNoLinkageFinder::VisitNestedNameSpecifier( case NestedNameSpecifier::TypeSpecWithTemplate: return Visit(QualType(NNS->getAsType(), 0)); } - return false; + llvm_unreachable("Invalid NestedNameSpecifier::Kind!"); } @@ -5324,7 +5317,6 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, return true; } - break; case TSK_ExplicitInstantiationDeclaration: switch (PrevTSK) { @@ -5364,7 +5356,6 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, HasNoEffect = true; return false; } - break; case TSK_ExplicitInstantiationDefinition: switch (PrevTSK) { @@ -5424,7 +5415,6 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, HasNoEffect = true; return false; } - break; } llvm_unreachable("Missing specialization/instantiation case?"); diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp index 03376fae92..a41878fcc1 100644 --- a/lib/Sema/SemaTemplateInstantiate.cpp +++ b/lib/Sema/SemaTemplateInstantiate.cpp @@ -163,8 +163,8 @@ bool Sema::ActiveTemplateInstantiation::isInstantiationRecord() const { case DefaultTemplateArgumentChecking: return false; } - - return true; + + llvm_unreachable("Invalid InstantiationKind!"); } Sema::InstantiatingTemplate:: diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 7fc5a1d777..ab6a2512e3 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -1398,10 +1398,8 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) { Macro->AddTokenToBody(Tok); break; } + } } - } - - return; } PreprocessedEntityID @@ -3275,8 +3273,6 @@ ASTReader::ASTReadResult ASTReader::ReadSubmoduleBlock(ModuleFile &F) { } } } - - return Success; } /// \brief Parse the record that corresponds to a LangOptions data @@ -3413,9 +3409,8 @@ PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) { return ID; } } - - Error("invalid offset in preprocessor detail block"); - return 0; + + llvm_unreachable("Invalid PreprocessorDetailRecordTypes"); } /// \brief \arg SLocMapI points at a chunk of a module that contains no @@ -4101,8 +4096,7 @@ QualType ASTReader::readTypeRecord(unsigned Index) { return Context.getAtomicType(ValueType); } } - // Suppress a GCC warning - return QualType(); + llvm_unreachable("Invalid TypeCode!"); } class clang::TypeLocReader : public TypeLocVisitor { @@ -4483,7 +4477,6 @@ ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F, return TemplateArgumentLocInfo(); } llvm_unreachable("unexpected template argument loc"); - return TemplateArgumentLocInfo(); } TemplateArgumentLoc @@ -4600,15 +4593,12 @@ Decl *ASTReader::GetDecl(DeclID ID) { case PREDEF_DECL_OBJC_INSTANCETYPE_ID: return Context.getObjCInstanceTypeDecl(); } - - return 0; } unsigned Index = ID - NUM_PREDEF_DECL_IDS; if (Index >= DeclsLoaded.size()) { Error("declaration ID out-of-range for AST file"); - return 0; } if (!DeclsLoaded[Index]) { @@ -5636,8 +5626,7 @@ ASTReader::ReadDeclarationName(ModuleFile &F, return DeclarationName::getUsingDirectiveName(); } - // Required to silence GCC warning - return DeclarationName(); + llvm_unreachable("Invalid NameKind!"); } void ASTReader::ReadDeclarationNameLoc(ModuleFile &F, diff --git a/lib/Serialization/ASTReaderStmt.cpp b/lib/Serialization/ASTReaderStmt.cpp index bdb7cd54a1..a7dfa1b19f 100644 --- a/lib/Serialization/ASTReaderStmt.cpp +++ b/lib/Serialization/ASTReaderStmt.cpp @@ -1447,7 +1447,6 @@ Stmt *ASTReader::ReadStmt(ModuleFile &F) { } llvm_unreachable("ReadingKind not set ?"); - return 0; } Expr *ASTReader::ReadExpr(ModuleFile &F) { @@ -1812,7 +1811,6 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { break; case EXPR_OBJC_KVC_REF_EXPR: llvm_unreachable("mismatching AST file"); - break; case EXPR_OBJC_MESSAGE_EXPR: S = ObjCMessageExpr::CreateEmpty(Context, Record[ASTStmtReader::NumExprFields], diff --git a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp index 59d0495d0a..2f2f9d1f0b 100644 --- a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp @@ -2732,7 +2732,7 @@ void RetainCountChecker::checkSummary(const RetainSummary &Summ, switch (RE.getKind()) { default: - llvm_unreachable("Unhandled RetEffect."); break; + llvm_unreachable("Unhandled RetEffect."); case RetEffect::NoRet: // No work necessary. @@ -2833,7 +2833,6 @@ RetainCountChecker::updateSymbol(const ProgramState *state, SymbolRef sym, case IncRefMsg: case MakeCollectable: llvm_unreachable("DecRefMsg/IncRefMsg/MakeCollectable already converted"); - return state; case Dealloc: // Any use of -dealloc in GC is *bad*. @@ -2846,7 +2845,6 @@ RetainCountChecker::updateSymbol(const ProgramState *state, SymbolRef sym, switch (V.getKind()) { default: llvm_unreachable("Invalid RefVal state for an explicit dealloc."); - break; case RefVal::Owned: // The object immediately transitions to the released state. V = V ^ RefVal::Released; @@ -2890,7 +2888,6 @@ RetainCountChecker::updateSymbol(const ProgramState *state, SymbolRef sym, switch (V.getKind()) { default: llvm_unreachable("Invalid RefVal state for a retain."); - break; case RefVal::Owned: case RefVal::NotOwned: V = V + 1; @@ -2912,7 +2909,6 @@ RetainCountChecker::updateSymbol(const ProgramState *state, SymbolRef sym, default: // case 'RefVal::Released' handled above. llvm_unreachable("Invalid RefVal state for a release."); - break; case RefVal::Owned: assert(V.getCount() > 0); @@ -2956,7 +2952,6 @@ void RetainCountChecker::processNonLeakError(const ProgramState *St, switch (ErrorKind) { default: llvm_unreachable("Unhandled error."); - return; case RefVal::ErrorUseAfterRelease: if (!useAfterRelease) useAfterRelease.reset(new UseAfterRelease()); diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 280a48c101..db84ccdce6 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -181,7 +181,7 @@ bool CursorVisitor::Visit(CXCursor Cursor, bool CheckedRegionOfInterest) { return VisitChildren(Cursor); } - return false; + llvm_unreachable("Invalid CXChildVisitResult!"); } static bool visitPreprocessedEntitiesInRange(SourceRange R, @@ -573,7 +573,6 @@ bool CursorVisitor::VisitDeclContext(DeclContext *DC) { bool CursorVisitor::VisitTranslationUnitDecl(TranslationUnitDecl *D) { llvm_unreachable("Translation units are visited directly by Visit()"); - return false; } bool CursorVisitor::VisitTypeAliasDecl(TypeAliasDecl *D) { @@ -1134,8 +1133,8 @@ bool CursorVisitor::VisitDeclarationNameInfo(DeclarationNameInfo Name) { // FIXME: Per-identifier location info? return false; } - - return false; + + llvm_unreachable("Invalid DeclarationName::Kind!"); } bool CursorVisitor::VisitNestedNameSpecifier(NestedNameSpecifier *NNS, @@ -1273,8 +1272,8 @@ bool CursorVisitor::VisitTemplateName(TemplateName Name, SourceLocation Loc) { Name.getAsSubstTemplateTemplateParmPack()->getParameterPack(), Loc, TU)); } - - return false; + + llvm_unreachable("Invalid TemplateName::Kind!"); } bool CursorVisitor::VisitTemplateArgumentLoc(const TemplateArgumentLoc &TAL) { @@ -1307,8 +1306,8 @@ bool CursorVisitor::VisitTemplateArgumentLoc(const TemplateArgumentLoc &TAL) { return VisitTemplateName(TAL.getArgument().getAsTemplateOrTemplatePattern(), TAL.getTemplateNameLoc()); } - - return false; + + llvm_unreachable("Invalid TemplateArgument::Kind!"); } bool CursorVisitor::VisitLinkageSpecDecl(LinkageSpecDecl *D) { @@ -3385,7 +3384,6 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) { } llvm_unreachable("Unhandled CXCursorKind"); - return createCXString((const char*) 0); } struct GetCursorData { @@ -3962,11 +3960,8 @@ CXCursor clang_getCursorReferenced(CXCursor C) { default: // We would prefer to enumerate all non-reference cursor kinds here. llvm_unreachable("Unhandled reference cursor kind"); - break; } } - - return clang_getNullCursor(); } CXCursor clang_getCursorDefinition(CXCursor C) { diff --git a/tools/libclang/CIndexCXX.cpp b/tools/libclang/CIndexCXX.cpp index fb0ccb146f..240b0f6c1f 100644 --- a/tools/libclang/CIndexCXX.cpp +++ b/tools/libclang/CIndexCXX.cpp @@ -46,9 +46,8 @@ enum CX_CXXAccessSpecifier clang_getCXXAccessSpecifier(CXCursor C) { case AS_private: return CX_CXXPrivate; case AS_none: return CX_CXXInvalidAccessSpecifier; } - - // FIXME: Clang currently thinks this is reachable. - return CX_CXXInvalidAccessSpecifier; + + llvm_unreachable("Invalid AccessSpecifier!"); } enum CXCursorKind clang_getTemplateCursorKind(CXCursor C) { diff --git a/tools/libclang/CIndexCodeCompletion.cpp b/tools/libclang/CIndexCodeCompletion.cpp index c19b340492..d8ac4cf3e6 100644 --- a/tools/libclang/CIndexCodeCompletion.cpp +++ b/tools/libclang/CIndexCodeCompletion.cpp @@ -104,8 +104,7 @@ clang_getCompletionChunkKind(CXCompletionString completion_string, return CXCompletionChunk_VerticalSpace; } - // Should be unreachable, but let's be careful. - return CXCompletionChunk_Text; + llvm_unreachable("Invalid CompletionKind!"); } CXString clang_getCompletionChunkText(CXCompletionString completion_string, @@ -182,8 +181,7 @@ clang_getCompletionChunkCompletionString(CXCompletionString completion_string, return (*CCStr)[chunk_number].Optional; } - // Should be unreachable, but let's be careful. - return 0; + llvm_unreachable("Invalid CompletionKind!"); } unsigned clang_getNumCompletionChunks(CXCompletionString completion_string) { diff --git a/tools/libclang/CIndexUSRs.cpp b/tools/libclang/CIndexUSRs.cpp index 1c2ffbfeb8..446baa08fa 100644 --- a/tools/libclang/CIndexUSRs.cpp +++ b/tools/libclang/CIndexUSRs.cpp @@ -395,7 +395,7 @@ void USRGenerator::VisitTagDecl(TagDecl *D) { case TTK_Struct: Out << "@ST"; break; case TTK_Class: Out << "@CT"; break; case TTK_Union: Out << "@UT"; break; - case TTK_Enum: llvm_unreachable("enum template"); break; + case TTK_Enum: llvm_unreachable("enum template"); } VisitTemplateParameterList(ClassTmpl->getTemplateParameters()); } else if (ClassTemplatePartialSpecializationDecl *PartialSpec @@ -406,7 +406,7 @@ void USRGenerator::VisitTagDecl(TagDecl *D) { case TTK_Struct: Out << "@SP"; break; case TTK_Class: Out << "@CP"; break; case TTK_Union: Out << "@UP"; break; - case TTK_Enum: llvm_unreachable("enum partial specialization"); break; + case TTK_Enum: llvm_unreachable("enum partial specialization"); } VisitTemplateParameterList(PartialSpec->getTemplateParameters()); } diff --git a/tools/libclang/CXLoadedDiagnostic.cpp b/tools/libclang/CXLoadedDiagnostic.cpp index b95515e6e2..09049e8a0e 100644 --- a/tools/libclang/CXLoadedDiagnostic.cpp +++ b/tools/libclang/CXLoadedDiagnostic.cpp @@ -84,7 +84,6 @@ CXDiagnosticSeverity CXLoadedDiagnostic::getSeverity() const { } llvm_unreachable("Invalid diagnostic level"); - return CXDiagnostic_Ignored; } static CXSourceLocation makeLocation(const CXLoadedDiagnostic::Location *DLoc) { @@ -297,7 +296,6 @@ CXDiagnosticSet DiagLoader::load(const char *file) { return 0; case Read_Record: llvm_unreachable("Top-level does not have records"); - return 0; case Read_BlockEnd: continue; case Read_BlockBegin: @@ -555,7 +553,6 @@ LoadResult DiagLoader::readDiagnosticBlock(llvm::BitstreamCursor &Stream, switch (Res) { case Read_EndOfStream: llvm_unreachable("EndOfStream handled in readToNextRecordOrBlock"); - return Failure; case Read_Failure: return Failure; case Read_BlockBegin: { diff --git a/tools/libclang/CXStoredDiagnostic.cpp b/tools/libclang/CXStoredDiagnostic.cpp index fb5d33d584..c1bcd74387 100644 --- a/tools/libclang/CXStoredDiagnostic.cpp +++ b/tools/libclang/CXStoredDiagnostic.cpp @@ -38,7 +38,6 @@ CXDiagnosticSeverity CXStoredDiagnostic::getSeverity() const { } llvm_unreachable("Invalid diagnostic level"); - return CXDiagnostic_Ignored; } CXSourceLocation CXStoredDiagnostic::getLocation() const { diff --git a/utils/TableGen/NeonEmitter.cpp b/utils/TableGen/NeonEmitter.cpp index 5d6dee6b44..e6f2e53aa7 100644 --- a/utils/TableGen/NeonEmitter.cpp +++ b/utils/TableGen/NeonEmitter.cpp @@ -28,6 +28,7 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/Support/ErrorHandling.h" #include using namespace llvm; @@ -56,7 +57,6 @@ static void ParseTypes(Record *r, std::string &s, default: throw TGError(r->getLoc(), "Unexpected letter: " + std::string(data + len, 1)); - break; } TV.push_back(StringRef(data, len + 1)); data += len + 1; @@ -78,7 +78,6 @@ static char Widen(const char t) { return 'f'; default: throw "unhandled type in widen!"; } - return '\0'; } /// Narrow - Convert a type code into the next smaller type. short -> char, @@ -95,7 +94,6 @@ static char Narrow(const char t) { return 'h'; default: throw "unhandled type in narrow!"; } - return '\0'; } /// For a particular StringRef, return the base type code, and whether it has @@ -266,7 +264,6 @@ static std::string TypeString(const char mod, StringRef typestr) { break; default: throw "unhandled type!"; - break; } if (mod == '2') @@ -449,7 +446,6 @@ static std::string MangleName(const std::string &name, StringRef typestr, break; default: throw "unhandled type!"; - break; } if (ck == ClassB) s += "_v"; @@ -588,7 +584,6 @@ static unsigned GetNumElements(StringRef typestr, bool &quad) { case 'f': nElts = 2; break; default: throw "unhandled type!"; - break; } if (quad) nElts <<= 1; return nElts; @@ -820,7 +815,6 @@ static std::string GenOpString(OpKind op, const std::string &proto, } default: throw "unknown OpKind!"; - break; } return s; } @@ -866,7 +860,6 @@ static unsigned GetNeonEnum(const std::string &proto, StringRef typestr) { break; default: throw "unhandled type!"; - break; } NeonTypeFlags Flags(ET, usgn, quad && proto[1] != 'g'); return Flags.getFlags(); @@ -1239,10 +1232,7 @@ static unsigned RangeFromType(const char mod, StringRef typestr) { return (1 << (int)quad) - 1; default: throw "unhandled type!"; - break; } - assert(0 && "unreachable"); - return 0; } /// runHeader - Emit a file with sections defining: