From b219cfc4d75f0a03630b7c4509ef791b7e97b2c8 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 23 Sep 2011 05:06:16 +0000 Subject: Switch assert(0/false) llvm_unreachable. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140367 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Attr.h | 4 +- include/clang/AST/DeclTemplate.h | 2 +- include/clang/AST/DeclVisitor.h | 2 +- include/clang/AST/Mangle.h | 2 +- include/clang/AST/RecursiveASTVisitor.h | 2 +- include/clang/AST/Stmt.h | 4 +- include/clang/AST/StmtVisitor.h | 6 +- include/clang/AST/Type.h | 2 +- include/clang/AST/TypeVisitor.h | 2 +- .../Analysis/Visitors/CFGRecStmtDeclVisitor.h | 2 +- .../clang/Analysis/Visitors/CFGRecStmtVisitor.h | 2 +- include/clang/Sema/DeclSpec.h | 2 +- lib/AST/APValue.cpp | 4 +- lib/AST/ASTContext.cpp | 32 ++++----- lib/AST/ASTDiagnostic.cpp | 2 +- lib/AST/ASTImporter.cpp | 2 +- lib/AST/Decl.cpp | 4 +- lib/AST/DeclBase.cpp | 10 +-- lib/AST/DeclCXX.cpp | 6 +- lib/AST/DeclObjC.cpp | 4 +- lib/AST/DeclPrinter.cpp | 4 +- lib/AST/DeclarationName.cpp | 12 ++-- lib/AST/Expr.cpp | 8 +-- lib/AST/ExprConstant.cpp | 6 +- lib/AST/ItaniumMangle.cpp | 6 +- lib/AST/MicrosoftMangle.cpp | 77 +++++++++++----------- lib/AST/StmtDumper.cpp | 4 +- lib/AST/StmtPrinter.cpp | 6 +- lib/AST/TemplateBase.cpp | 4 +- lib/Analysis/CFG.cpp | 4 +- lib/Analysis/FormatString.cpp | 4 +- lib/Analysis/PrintfFormatString.cpp | 2 +- lib/Basic/DiagnosticIDs.cpp | 2 +- lib/Basic/TargetInfo.cpp | 10 +-- lib/Basic/Targets.cpp | 4 +- lib/CodeGen/CGBuiltin.cpp | 18 ++--- lib/CodeGen/CGCall.cpp | 8 +-- lib/CodeGen/CGDebugInfo.cpp | 10 +-- lib/CodeGen/CGDecl.cpp | 8 +-- lib/CodeGen/CGExpr.cpp | 13 ++-- lib/CodeGen/CGExprAgg.cpp | 2 +- lib/CodeGen/CGExprComplex.cpp | 2 +- lib/CodeGen/CGExprConstant.cpp | 4 +- lib/CodeGen/CGExprScalar.cpp | 12 ++-- lib/CodeGen/CGObjCGNU.cpp | 2 +- lib/CodeGen/CGObjCMac.cpp | 2 +- lib/CodeGen/CGObjCRuntime.h | 3 +- lib/CodeGen/CGRTTI.cpp | 10 +-- lib/CodeGen/CGStmt.cpp | 6 +- lib/CodeGen/CGVTables.cpp | 14 ++-- lib/CodeGen/CodeGenAction.cpp | 2 +- lib/CodeGen/CodeGenModule.cpp | 2 +- lib/CodeGen/CodeGenTypes.cpp | 2 +- lib/CodeGen/TargetInfo.cpp | 8 +-- lib/Driver/Action.cpp | 2 +- lib/Driver/Driver.cpp | 4 +- lib/Driver/OptTable.cpp | 6 +- lib/Driver/Option.cpp | 8 +-- lib/Driver/Phases.cpp | 2 +- lib/Driver/ToolChains.cpp | 10 +-- lib/Driver/Tools.cpp | 2 +- lib/Frontend/ASTConsumers.cpp | 4 +- lib/Frontend/CompilerInvocation.cpp | 4 +- lib/Frontend/TextDiagnosticBuffer.cpp | 3 +- lib/Frontend/TextDiagnosticPrinter.cpp | 4 +- lib/Index/ASTLocation.cpp | 4 +- lib/Lex/LiteralSupport.cpp | 2 +- lib/Lex/PPExpressions.cpp | 2 +- lib/Lex/PPMacroExpansion.cpp | 2 +- lib/Lex/Pragma.cpp | 2 +- lib/Parse/ParseExpr.cpp | 2 +- lib/Parse/ParseExprCXX.cpp | 12 ++-- lib/Parse/ParseObjc.cpp | 2 +- lib/Rewrite/RewriteObjC.cpp | 12 ++-- lib/Sema/DeclSpec.cpp | 6 +- lib/Sema/IdentifierResolver.cpp | 2 +- lib/Sema/SemaAttr.cpp | 2 +- lib/Sema/SemaCXXScopeSpec.cpp | 2 +- lib/Sema/SemaChecking.cpp | 2 +- lib/Sema/SemaCodeComplete.cpp | 2 +- lib/Sema/SemaDecl.cpp | 12 ++-- lib/Sema/SemaDeclAttr.cpp | 2 +- lib/Sema/SemaDeclCXX.cpp | 2 +- lib/Sema/SemaDeclObjC.cpp | 2 +- lib/Sema/SemaExceptionSpec.cpp | 2 +- lib/Sema/SemaExpr.cpp | 16 ++--- lib/Sema/SemaExprCXX.cpp | 14 ++-- lib/Sema/SemaInit.cpp | 4 +- lib/Sema/SemaOverload.cpp | 13 ++-- lib/Sema/SemaStmt.cpp | 2 +- lib/Sema/SemaTemplate.cpp | 11 ++-- lib/Sema/SemaTemplateDeduction.cpp | 4 +- lib/Sema/SemaTemplateInstantiateDecl.cpp | 8 +-- lib/Sema/SemaType.cpp | 8 +-- lib/Sema/TreeTransform.h | 6 +- lib/Serialization/ASTReader.cpp | 4 +- lib/Serialization/ASTReaderDecl.cpp | 10 +-- lib/Serialization/ASTWriter.cpp | 4 +- lib/Serialization/ASTWriterDecl.cpp | 2 +- lib/Serialization/ASTWriterStmt.cpp | 2 +- .../Checkers/StackAddrEscapeChecker.cpp | 2 +- lib/StaticAnalyzer/Core/AggExprVisitor.cpp | 2 +- lib/StaticAnalyzer/Core/BugReporter.cpp | 2 +- lib/StaticAnalyzer/Core/CoreEngine.cpp | 4 +- lib/StaticAnalyzer/Core/ExprEngine.cpp | 2 +- lib/StaticAnalyzer/Core/ExprEngineC.cpp | 8 +-- lib/StaticAnalyzer/Core/RegionStore.cpp | 4 +- lib/StaticAnalyzer/Core/SVals.cpp | 4 +- .../Core/SimpleConstraintManager.cpp | 4 +- lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp | 16 ++--- lib/StaticAnalyzer/Core/Store.cpp | 6 +- lib/StaticAnalyzer/Core/SymbolManager.cpp | 2 +- lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp | 4 +- tools/libclang/CIndex.cpp | 2 +- tools/libclang/CIndexDiagnostic.cpp | 2 +- tools/libclang/CIndexUSRs.cpp | 2 +- tools/libclang/CIndexer.cpp | 2 +- 117 files changed, 342 insertions(+), 336 deletions(-) diff --git a/include/clang/AST/Attr.h b/include/clang/AST/Attr.h index 2f0eafa5c1..67975e4f9c 100644 --- a/include/clang/AST/Attr.h +++ b/include/clang/AST/Attr.h @@ -66,11 +66,11 @@ protected: virtual ~Attr(); void* operator new(size_t bytes) throw() { - assert(0 && "Attrs cannot be allocated with regular 'new'."); + llvm_unreachable("Attrs cannot be allocated with regular 'new'."); return 0; } void operator delete(void* data) throw() { - assert(0 && "Attrs cannot be released with regular 'delete'."); + llvm_unreachable("Attrs cannot be released with regular 'delete'."); } public: diff --git a/include/clang/AST/DeclTemplate.h b/include/clang/AST/DeclTemplate.h index 04c6674426..138e47d1a9 100644 --- a/include/clang/AST/DeclTemplate.h +++ b/include/clang/AST/DeclTemplate.h @@ -908,7 +908,7 @@ protected: // FIXME: This should probably never be called, but it's here as TemplateParmPosition() : Depth(0), Position(0) - { /* assert(0 && "Cannot create positionless template parameter"); */ } + { /* llvm_unreachable("Cannot create positionless template parameter"); */ } TemplateParmPosition(unsigned D, unsigned P) : Depth(D), Position(P) diff --git a/include/clang/AST/DeclVisitor.h b/include/clang/AST/DeclVisitor.h index aee1998028..b5b6bd42dd 100644 --- a/include/clang/AST/DeclVisitor.h +++ b/include/clang/AST/DeclVisitor.h @@ -30,7 +30,7 @@ class DeclVisitor { public: RetTy Visit(Decl *D) { switch (D->getKind()) { - default: assert(false && "Decl that isn't part of DeclNodes.inc!"); + default: llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); #define DECL(DERIVED, BASE) \ case Decl::DERIVED: DISPATCH(DERIVED##Decl, DERIVED##Decl); #define ABSTRACT_DECL(DECL) diff --git a/include/clang/AST/Mangle.h b/include/clang/AST/Mangle.h index d40e101b2b..fcb7ebdba5 100644 --- a/include/clang/AST/Mangle.h +++ b/include/clang/AST/Mangle.h @@ -135,7 +135,7 @@ public: // This is pretty lame. virtual void mangleItaniumGuardVariable(const VarDecl *D, raw_ostream &) { - assert(0 && "Target does not support mangling guard variables"); + llvm_unreachable("Target does not support mangling guard variables"); } /// @} }; diff --git a/include/clang/AST/RecursiveASTVisitor.h b/include/clang/AST/RecursiveASTVisitor.h index f4c8bae7d1..36add6c457 100644 --- a/include/clang/AST/RecursiveASTVisitor.h +++ b/include/clang/AST/RecursiveASTVisitor.h @@ -1322,7 +1322,7 @@ bool RecursiveASTVisitor::TraverseFunctionInstantiations( case TSK_ExplicitSpecialization: break; default: - assert(false && "Unknown specialization kind."); + llvm_unreachable("Unknown specialization kind."); } } diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 34b8a12f40..c186b4896e 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -107,11 +107,11 @@ public: // Make vanilla 'new' and 'delete' illegal for Stmts. protected: void* operator new(size_t bytes) throw() { - assert(0 && "Stmts cannot be allocated with regular 'new'."); + llvm_unreachable("Stmts cannot be allocated with regular 'new'."); return 0; } void operator delete(void* data) throw() { - assert(0 && "Stmts cannot be released with regular 'delete'."); + llvm_unreachable("Stmts cannot be released with regular 'delete'."); } class StmtBitfields { diff --git a/include/clang/AST/StmtVisitor.h b/include/clang/AST/StmtVisitor.h index 29d2347546..48a0123608 100644 --- a/include/clang/AST/StmtVisitor.h +++ b/include/clang/AST/StmtVisitor.h @@ -42,7 +42,7 @@ public: // below. if (PTR(BinaryOperator) BinOp = dyn_cast(S)) { switch (BinOp->getOpcode()) { - default: assert(0 && "Unknown binary operator!"); + default: llvm_unreachable("Unknown binary operator!"); case BO_PtrMemD: DISPATCH(BinPtrMemD, BinaryOperator); case BO_PtrMemI: DISPATCH(BinPtrMemI, BinaryOperator); case BO_Mul: DISPATCH(BinMul, BinaryOperator); @@ -80,7 +80,7 @@ public: } } else if (PTR(UnaryOperator) UnOp = dyn_cast(S)) { switch (UnOp->getOpcode()) { - default: assert(0 && "Unknown unary operator!"); + default: llvm_unreachable("Unknown unary operator!"); case UO_PostInc: DISPATCH(UnaryPostInc, UnaryOperator); case UO_PostDec: DISPATCH(UnaryPostDec, UnaryOperator); case UO_PreInc: DISPATCH(UnaryPreInc, UnaryOperator); @@ -99,7 +99,7 @@ public: // Top switch stmt: dispatch to VisitFooStmt for each FooStmt. switch (S->getStmtClass()) { - default: assert(0 && "Unknown stmt kind!"); + default: llvm_unreachable("Unknown stmt kind!"); #define ABSTRACT_STMT(STMT) #define STMT(CLASS, PARENT) \ case Stmt::CLASS ## Class: DISPATCH(CLASS, CLASS); diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index e68d206f21..ad7ab27968 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -2252,7 +2252,7 @@ public: friend class StmtIteratorBase; void Profile(llvm::FoldingSetNodeID &ID) { - assert(0 && "Cannot unique VariableArrayTypes."); + llvm_unreachable("Cannot unique VariableArrayTypes."); } }; diff --git a/include/clang/AST/TypeVisitor.h b/include/clang/AST/TypeVisitor.h index c52926b1fc..9eebc4b9ea 100644 --- a/include/clang/AST/TypeVisitor.h +++ b/include/clang/AST/TypeVisitor.h @@ -28,7 +28,7 @@ public: RetTy Visit(const Type *T) { // Top switch stmt: dispatch to VisitFooType for each FooType. switch (T->getTypeClass()) { - default: assert(0 && "Unknown type class!"); + default: llvm_unreachable("Unknown type class!"); #define ABSTRACT_TYPE(CLASS, PARENT) #define TYPE(CLASS, PARENT) case Type::CLASS: DISPATCH(CLASS##Type); #include "clang/AST/TypeNodes.def" diff --git a/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h b/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h index 9d7f8107db..5c5ec2d7af 100644 --- a/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h +++ b/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h @@ -69,7 +69,7 @@ public: DISPATCH_CASE(UsingDirective) DISPATCH_CASE(Using) default: - assert(false && "Subtype of ScopedDecl not handled."); + llvm_unreachable("Subtype of ScopedDecl not handled."); } } diff --git a/include/clang/Analysis/Visitors/CFGRecStmtVisitor.h b/include/clang/Analysis/Visitors/CFGRecStmtVisitor.h index 55212b463e..4d1cabfc5c 100644 --- a/include/clang/Analysis/Visitors/CFGRecStmtVisitor.h +++ b/include/clang/Analysis/Visitors/CFGRecStmtVisitor.h @@ -45,7 +45,7 @@ break; CONDVAR_CASE(WhileStmt) #undef CONDVAR_CASE default: - assert(false && "Infeasible"); + llvm_unreachable("Infeasible"); } static_cast(this)->Visit(CondVar->getInit()); } diff --git a/include/clang/Sema/DeclSpec.h b/include/clang/Sema/DeclSpec.h index 177de65a34..392284f8d5 100644 --- a/include/clang/Sema/DeclSpec.h +++ b/include/clang/Sema/DeclSpec.h @@ -1226,7 +1226,7 @@ struct DeclaratorChunk { void destroy() { switch (Kind) { - default: assert(0 && "Unknown decl type!"); + default: llvm_unreachable("Unknown decl type!"); case DeclaratorChunk::Function: return Fun.destroy(); case DeclaratorChunk::Pointer: return Ptr.destroy(); case DeclaratorChunk::BlockPointer: return Cls.destroy(); diff --git a/lib/AST/APValue.cpp b/lib/AST/APValue.cpp index 27d9234d76..7a74c97048 100644 --- a/lib/AST/APValue.cpp +++ b/lib/AST/APValue.cpp @@ -93,7 +93,7 @@ static double GetApproxValue(const llvm::APFloat &F) { void APValue::print(raw_ostream &OS) const { switch (getKind()) { - default: assert(0 && "Unknown APValue kind!"); + default: llvm_unreachable("Unknown APValue kind!"); case Uninitialized: OS << "Uninitialized"; return; @@ -123,7 +123,7 @@ void APValue::print(raw_ostream &OS) const { static void WriteShortAPValueToStream(raw_ostream& Out, const APValue& V) { switch (V.getKind()) { - default: assert(0 && "Unknown APValue kind!"); + default: llvm_unreachable("Unknown APValue kind!"); case APValue::Uninitialized: Out << "Uninitialized"; break; diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 50a3942cc1..de77cb66cf 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -682,7 +682,7 @@ const llvm::fltSemantics &ASTContext::getFloatTypeSemantics(QualType T) const { const BuiltinType *BT = T->getAs(); assert(BT && "Not a floating point type!"); switch (BT->getKind()) { - default: assert(0 && "Not a floating point type!"); + default: llvm_unreachable("Not a floating point type!"); case BuiltinType::Float: return Target->getFloatFormat(); case BuiltinType::Double: return Target->getDoubleFormat(); case BuiltinType::LongDouble: return Target->getLongDoubleFormat(); @@ -849,7 +849,7 @@ ASTContext::getTypeInfo(const Type *T) const { case Type::Builtin: switch (cast(T)->getKind()) { - default: assert(0 && "Unknown builtin type!"); + default: llvm_unreachable("Unknown builtin type!"); case BuiltinType::Void: // GCC extension: alignof(void) = 8 bits. Width = 0; @@ -3218,7 +3218,7 @@ ASTContext::getCanonicalTemplateArgument(const TemplateArgument &Arg) const { } // Silence GCC warning - assert(false && "Unhandled template argument kind"); + llvm_unreachable("Unhandled template argument kind"); return TemplateArgument(); } @@ -3432,7 +3432,7 @@ static FloatingRank getFloatingRank(QualType T) { assert(T->getAs() && "getFloatingRank(): not a floating type"); switch (T->getAs()->getKind()) { - default: assert(0 && "getFloatingRank(): not a floating type"); + default: llvm_unreachable("getFloatingRank(): not a floating type"); case BuiltinType::Float: return FloatRank; case BuiltinType::Double: return DoubleRank; case BuiltinType::LongDouble: return LongDoubleRank; @@ -3448,7 +3448,7 @@ QualType ASTContext::getFloatingTypeOfSizeWithinDomain(QualType Size, FloatingRank EltRank = getFloatingRank(Size); if (Domain->isComplexType()) { switch (EltRank) { - default: assert(0 && "getFloatingRank(): illegal value for rank"); + default: llvm_unreachable("getFloatingRank(): illegal value for rank"); case FloatRank: return FloatComplexTy; case DoubleRank: return DoubleComplexTy; case LongDoubleRank: return LongDoubleComplexTy; @@ -3457,7 +3457,7 @@ QualType ASTContext::getFloatingTypeOfSizeWithinDomain(QualType Size, assert(Domain->isRealFloatingType() && "Unknown domain!"); switch (EltRank) { - default: assert(0 && "getFloatingRank(): illegal value for rank"); + default: llvm_unreachable("getFloatingRank(): illegal value for rank"); case FloatRank: return FloatTy; case DoubleRank: return DoubleTy; case LongDoubleRank: return LongDoubleTy; @@ -3498,7 +3498,7 @@ unsigned ASTContext::getIntegerRank(const Type *T) const { T = getFromTargetType(Target->getChar32Type()).getTypePtr(); switch (cast(T)->getKind()) { - default: assert(0 && "getIntegerRank(): not a built-in integer"); + default: llvm_unreachable("getIntegerRank(): not a built-in integer"); case BuiltinType::Bool: return 1 + (getIntWidth(BoolTy) << 3); case BuiltinType::Char_S: @@ -4177,7 +4177,7 @@ void ASTContext::getObjCEncodingForType(QualType T, std::string& S, static char ObjCEncodingForPrimitiveKind(const ASTContext *C, QualType T) { switch (T->getAs()->getKind()) { - default: assert(0 && "Unhandled builtin type kind"); + default: llvm_unreachable("Unhandled builtin type kind"); case BuiltinType::Void: return 'v'; case BuiltinType::Bool: return 'B'; case BuiltinType::Char_U: @@ -4536,7 +4536,7 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, return; } - assert(0 && "@encode for type not implemented!"); + llvm_unreachable("@encode for type not implemented!"); } void ASTContext::getObjCEncodingForStructureImpl(RecordDecl *RDecl, @@ -4918,7 +4918,7 @@ CanQualType ASTContext::getFromTargetType(unsigned Type) const { case TargetInfo::UnsignedLongLong: return UnsignedLongLongTy; } - assert(false && "Unhandled TargetInfo::IntType value"); + llvm_unreachable("Unhandled TargetInfo::IntType value"); return CanQualType(); } @@ -5748,13 +5748,13 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS, #define NON_CANONICAL_TYPE(Class, Base) case Type::Class: #define DEPENDENT_TYPE(Class, Base) case Type::Class: #include "clang/AST/TypeNodes.def" - assert(false && "Non-canonical and dependent types shouldn't get here"); + llvm_unreachable("Non-canonical and dependent types shouldn't get here"); return QualType(); case Type::LValueReference: case Type::RValueReference: case Type::MemberPointer: - assert(false && "C++ should never be in mergeTypes"); + llvm_unreachable("C++ should never be in mergeTypes"); return QualType(); case Type::ObjCInterface: @@ -5762,7 +5762,7 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS, case Type::VariableArray: case Type::FunctionProto: case Type::ExtVector: - assert(false && "Types are eliminated above"); + llvm_unreachable("Types are eliminated above"); return QualType(); case Type::Pointer: @@ -6014,7 +6014,7 @@ QualType ASTContext::getCorrespondingUnsignedType(QualType T) { case BuiltinType::Int128: return UnsignedInt128Ty; default: - assert(0 && "Unexpected signed integer type"); + llvm_unreachable("Unexpected signed integer type"); return QualType(); } } @@ -6072,7 +6072,7 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context, // Read the base type. switch (*Str++) { - default: assert(0 && "Unknown builtin type letter!"); + default: llvm_unreachable("Unknown builtin type letter!"); case 'v': assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers used with 'v'!"); @@ -6475,7 +6475,7 @@ MangleContext *ASTContext::createMangleContext() { case CXXABI_Microsoft: return createMicrosoftMangleContext(*this, getDiagnostics()); } - assert(0 && "Unsupported ABI"); + llvm_unreachable("Unsupported ABI"); return 0; } diff --git a/lib/AST/ASTDiagnostic.cpp b/lib/AST/ASTDiagnostic.cpp index e6de54c907..f9100c0110 100644 --- a/lib/AST/ASTDiagnostic.cpp +++ b/lib/AST/ASTDiagnostic.cpp @@ -235,7 +235,7 @@ void clang::FormatASTNodeDiagnosticArgument( bool NeedQuotes = true; switch (Kind) { - default: assert(0 && "unknown ArgumentKind"); + default: llvm_unreachable("unknown ArgumentKind"); case Diagnostic::ak_qualtype: { assert(ModLen == 0 && ArgLen == 0 && "Invalid modifier for QualType argument"); diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index c791ba1a58..55610cbc63 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -1803,7 +1803,7 @@ ASTNodeImporter::ImportDeclarationNameLoc(const DeclarationNameInfo &From, To.setNamedTypeInfo(Importer.Import(FromTInfo)); return; } - assert(0 && "Unknown name kind."); + llvm_unreachable("Unknown name kind."); } } diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 57f9995fce..2fdb9654b0 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -1890,7 +1890,7 @@ FunctionDecl::TemplatedKind FunctionDecl::getTemplatedKind() const { ()) return TK_DependentFunctionTemplateSpecialization; - assert(false && "Did we miss a TemplateOrSpecialization type?"); + llvm_unreachable("Did we miss a TemplateOrSpecialization type?"); return TK_NonTemplate; } @@ -2114,7 +2114,7 @@ FunctionDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK, MSInfo->getPointOfInstantiation().isInvalid()) MSInfo->setPointOfInstantiation(PointOfInstantiation); } else - assert(false && "Function cannot have a template specialization kind"); + llvm_unreachable("Function cannot have a template specialization kind"); } SourceLocation FunctionDecl::getPointOfInstantiation() const { diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index 68cf82edc4..d1f8b1c7fd 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -43,7 +43,7 @@ static bool StatSwitch = false; const char *Decl::getDeclKindName() const { switch (DeclKind) { - default: assert(0 && "Declaration not in DeclNodes.inc!"); + default: llvm_unreachable("Declaration not in DeclNodes.inc!"); #define DECL(DERIVED, BASE) case DERIVED: return #DERIVED; #define ABSTRACT_DECL(DECL) #include "clang/AST/DeclNodes.inc" @@ -62,7 +62,7 @@ void Decl::setInvalidDecl(bool Invalid) { const char *DeclContext::getDeclKindName() const { switch (DeclKind) { - default: assert(0 && "Declaration context not in DeclNodes.inc!"); + default: llvm_unreachable("Declaration context not in DeclNodes.inc!"); #define DECL(DERIVED, BASE) case Decl::DERIVED: return #DERIVED; #define ABSTRACT_DECL(DECL) #include "clang/AST/DeclNodes.inc" @@ -100,7 +100,7 @@ void Decl::PrintStats() { void Decl::add(Kind k) { switch (k) { - default: assert(0 && "Declaration not in DeclNodes.inc!"); + default: llvm_unreachable("Declaration not in DeclNodes.inc!"); #define DECL(DERIVED, BASE) case DERIVED: ++n##DERIVED##s; break; #define ABSTRACT_DECL(DECL) #include "clang/AST/DeclNodes.inc" @@ -571,7 +571,7 @@ Decl *Decl::castFromDeclContext (const DeclContext *D) { if (DK >= first##NAME && DK <= last##NAME) \ return static_cast(const_cast(D)); #include "clang/AST/DeclNodes.inc" - assert(false && "a decl that inherits DeclContext isn't handled"); + llvm_unreachable("a decl that inherits DeclContext isn't handled"); return 0; } } @@ -591,7 +591,7 @@ DeclContext *Decl::castToDeclContext(const Decl *D) { if (DK >= first##NAME && DK <= last##NAME) \ return static_cast(const_cast(D)); #include "clang/AST/DeclNodes.inc" - assert(false && "a decl that inherits DeclContext isn't handled"); + llvm_unreachable("a decl that inherits DeclContext isn't handled"); return 0; } } diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 89051152d7..b9af8e3a1f 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -671,7 +671,7 @@ NotASpecialMember:; case AS_private: data().HasPrivateFields = true; break; case AS_protected: data().HasProtectedFields = true; break; case AS_public: data().HasPublicFields = true; break; - case AS_none: assert(0 && "Invalid access specifier"); + case AS_none: llvm_unreachable("Invalid access specifier"); }; if ((data().HasPrivateFields + data().HasProtectedFields + data().HasPublicFields) > 1) @@ -1053,7 +1053,7 @@ CXXRecordDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK) { return; } - assert(false && "Not a class template or member class specialization"); + llvm_unreachable("Not a class template or member class specialization"); } CXXDestructorDecl *CXXRecordDecl::getDestructor() const { @@ -1693,7 +1693,7 @@ static const char *getAccessName(AccessSpecifier AS) { switch (AS) { default: case AS_none: - assert(0 && "Invalid access specifier!"); + llvm_unreachable("Invalid access specifier!"); return 0; case AS_public: return "public"; diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index 45e34811ea..68177de70d 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -549,7 +549,7 @@ ObjCInterfaceDecl *ObjCMethodDecl::getClassInterface() { return IMD->getClassInterface(); assert(!isa(getDeclContext()) && "It's a protocol method"); - assert(false && "unknown method context"); + llvm_unreachable("unknown method context"); return 0; } @@ -781,7 +781,7 @@ const ObjCInterfaceDecl *ObjCIvarDecl::getContainingInterface() const { default: case ObjCCategoryImpl: case ObjCProtocol: - assert(0 && "invalid ivar container!"); + llvm_unreachable("invalid ivar container!"); return 0; // Ivars can only appear in class extension categories. diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index 866153db11..a17e14053c 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -114,7 +114,7 @@ static QualType GetBaseType(QualType T) { else if (const VectorType *VTy = BaseType->getAs()) BaseType = VTy->getElementType(); else - assert(0 && "Unknown declarator!"); + llvm_unreachable("Unknown declarator!"); } return BaseType; } @@ -192,7 +192,7 @@ void DeclPrinter::ProcessDeclGroup(SmallVectorImpl& Decls) { void DeclPrinter::Print(AccessSpecifier AS) { switch(AS) { - case AS_none: assert(0 && "No access specifier!"); break; + case AS_none: llvm_unreachable("No access specifier!"); break; case AS_public: Out << "public"; break; case AS_protected: Out << "protected"; break; case AS_private: Out << "private"; break; diff --git a/lib/AST/DeclarationName.cpp b/lib/AST/DeclarationName.cpp index a3ba94195f..84d4ca94c3 100644 --- a/lib/AST/DeclarationName.cpp +++ b/lib/AST/DeclarationName.cpp @@ -193,7 +193,7 @@ DeclarationName::NameKind DeclarationName::getNameKind() const { } // Can't actually get here. - assert(0 && "This should be unreachable!"); + llvm_unreachable("This should be unreachable!"); return Identifier; } @@ -276,7 +276,7 @@ void DeclarationName::printName(raw_ostream &OS) const { return; } - assert(false && "Unexpected declaration name kind"); + llvm_unreachable("Unexpected declaration name kind"); } QualType DeclarationName::getCXXNameType() const { @@ -338,7 +338,7 @@ void *DeclarationName::getFETokenInfoAsVoid() const { return getCXXLiteralIdentifier()->getFETokenInfo(); default: - assert(false && "Declaration name has no FETokenInfo"); + llvm_unreachable("Declaration name has no FETokenInfo"); } return 0; } @@ -364,7 +364,7 @@ void DeclarationName::setFETokenInfo(void *T) { break; default: - assert(false && "Declaration name has no FETokenInfo"); + llvm_unreachable("Declaration name has no FETokenInfo"); } } @@ -588,7 +588,7 @@ void DeclarationNameInfo::printName(raw_ostream &OS) const { Name.printName(OS); return; } - assert(false && "Unexpected declaration name kind"); + llvm_unreachable("Unexpected declaration name kind"); } SourceLocation DeclarationNameInfo::getEndLoc() const { @@ -621,6 +621,6 @@ SourceLocation DeclarationNameInfo::getEndLoc() const { case DeclarationName::CXXUsingDirective: return NameLoc; } - assert(false && "Unexpected declaration name kind"); + llvm_unreachable("Unexpected declaration name kind"); return SourceLocation(); } diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 374c1a03a7..a358693a52 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -595,7 +595,7 @@ getLocationOfByte(unsigned ByteNo, const SourceManager &SM, /// corresponds to, e.g. "sizeof" or "[pre]++". const char *UnaryOperator::getOpcodeStr(Opcode Op) { switch (Op) { - default: assert(0 && "Unknown unary operator"); + default: llvm_unreachable("Unknown unary operator"); case UO_PostInc: return "++"; case UO_PostDec: return "--"; case UO_PreInc: return "++"; @@ -615,7 +615,7 @@ const char *UnaryOperator::getOpcodeStr(Opcode Op) { UnaryOperatorKind UnaryOperator::getOverloadedOpcode(OverloadedOperatorKind OO, bool Postfix) { switch (OO) { - default: assert(false && "No unary operator for overloaded function"); + default: llvm_unreachable("No unary operator for overloaded function"); case OO_PlusPlus: return Postfix ? UO_PostInc : UO_PreInc; case OO_MinusMinus: return Postfix ? UO_PostDec : UO_PreDec; case OO_Amp: return UO_AddrOf; @@ -1289,7 +1289,7 @@ const char *BinaryOperator::getOpcodeStr(Opcode Op) { BinaryOperatorKind BinaryOperator::getOverloadedOpcode(OverloadedOperatorKind OO) { switch (OO) { - default: assert(false && "Not an overloadable binary operator"); + default: llvm_unreachable("Not an overloadable binary operator"); case OO_Plus: return BO_Add; case OO_Minus: return BO_Sub; case OO_Star: return BO_Mul; @@ -2495,7 +2495,7 @@ Expr::isNullPointerConstant(ASTContext &Ctx, if (isValueDependent()) { switch (NPC) { case NPC_NeverValueDependent: - assert(false && "Unexpected value dependent expression!"); + llvm_unreachable("Unexpected value dependent expression!"); // If the unthinkable happens, fall through to the safest alternative. case NPC_ValueDependentIsNull: diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp index 97786053be..2d4b07021c 100644 --- a/lib/AST/ExprConstant.cpp +++ b/lib/AST/ExprConstant.cpp @@ -388,7 +388,7 @@ public: ExprEvaluatorBase(EvalInfo &Info) : Info(Info) {} RetTy VisitStmt(const Stmt *) { - assert(0 && "Expression evaluator should not be called on stmts"); + llvm_unreachable("Expression evaluator should not be called on stmts"); return DerivedError(0); } RetTy VisitExpr(const Expr *E) { @@ -1218,7 +1218,7 @@ static int EvaluateBuiltinClassifyType(const CallExpr *E) { else if (ArgTy->isUnionType()) return union_type_class; else // FIXME: offset_type_class, method_type_class, & lang_type_class? - assert(0 && "CallExpr::isBuiltinClassifyType(): unimplemented type"); + llvm_unreachable("CallExpr::isBuiltinClassifyType(): unimplemented type"); return -1; } @@ -1427,7 +1427,7 @@ bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) { switch (E->getOpcode()) { default: - assert(0 && "Invalid binary operator!"); + llvm_unreachable("Invalid binary operator!"); case BO_LT: return Success(CR == APFloat::cmpLessThan, E); case BO_GT: diff --git a/lib/AST/ItaniumMangle.cpp b/lib/AST/ItaniumMangle.cpp index 296bad535c..ab6ec4e6a1 100644 --- a/lib/AST/ItaniumMangle.cpp +++ b/lib/AST/ItaniumMangle.cpp @@ -1069,7 +1069,7 @@ void CXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND, case DeclarationName::ObjCZeroArgSelector: case DeclarationName::ObjCOneArgSelector: case DeclarationName::ObjCMultiArgSelector: - assert(false && "Can't mangle Objective-C selector names here!"); + llvm_unreachable("Can't mangle Objective-C selector names here!"); break; case DeclarationName::CXXConstructorName: @@ -1124,7 +1124,7 @@ void CXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND, break; case DeclarationName::CXXUsingDirective: - assert(false && "Can't mangle a using directive name!"); + llvm_unreachable("Can't mangle a using directive name!"); break; } } @@ -1512,7 +1512,7 @@ CXXNameMangler::mangleOperatorName(OverloadedOperatorKind OO, unsigned Arity) { case OO_None: case NUM_OVERLOADED_OPERATORS: - assert(false && "Not an overloaded operator"); + llvm_unreachable("Not an overloaded operator"); break; } } diff --git a/lib/AST/MicrosoftMangle.cpp b/lib/AST/MicrosoftMangle.cpp index 14a1d6662d..fd90883bdf 100644 --- a/lib/AST/MicrosoftMangle.cpp +++ b/lib/AST/MicrosoftMangle.cpp @@ -332,15 +332,15 @@ MicrosoftCXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND, case DeclarationName::ObjCZeroArgSelector: case DeclarationName::ObjCOneArgSelector: case DeclarationName::ObjCMultiArgSelector: - assert(false && "Can't mangle Objective-C selector names here!"); + llvm_unreachable("Can't mangle Objective-C selector names here!"); break; case DeclarationName::CXXConstructorName: - assert(false && "Can't mangle constructors yet!"); + llvm_unreachable("Can't mangle constructors yet!"); break; case DeclarationName::CXXDestructorName: - assert(false && "Can't mangle destructors yet!"); + llvm_unreachable("Can't mangle destructors yet!"); break; case DeclarationName::CXXConversionFunctionName: @@ -355,11 +355,11 @@ MicrosoftCXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND, case DeclarationName::CXXLiteralOperatorName: // FIXME: Was this added in VS2010? Does MS even know how to mangle this? - assert(false && "Don't know how to mangle literal operators yet!"); + llvm_unreachable("Don't know how to mangle literal operators yet!"); break; case DeclarationName::CXXUsingDirective: - assert(false && "Can't mangle a using directive name!"); + llvm_unreachable("Can't mangle a using directive name!"); break; } } @@ -513,12 +513,12 @@ void MicrosoftCXXNameMangler::mangleOperatorName(OverloadedOperatorKind OO) { case OO_Array_Delete: Out << "?_V"; break; case OO_Conditional: - assert(false && "Don't know how to mangle ?:"); + llvm_unreachable("Don't know how to mangle ?:"); break; case OO_None: case NUM_OVERLOADED_OPERATORS: - assert(false && "Not an overloaded operator"); + llvm_unreachable("Not an overloaded operator"); break; } } @@ -712,7 +712,7 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T) { case BuiltinType::Dependent: case BuiltinType::UnknownAny: case BuiltinType::BoundMember: - assert(false && + llvm_unreachable( "Overloaded and dependent types shouldn't get to name mangling"); break; case BuiltinType::ObjCId: Out << "PAUobjc_object@@"; break; @@ -722,7 +722,7 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T) { case BuiltinType::Char16: case BuiltinType::Char32: case BuiltinType::NullPtr: - assert(false && "Don't know how to mangle this type"); + llvm_unreachable("Don't know how to mangle this type"); break; } } @@ -869,7 +869,7 @@ void MicrosoftCXXNameMangler::mangleCallingConvention(const FunctionType *T, CC = IsInstMethod ? getASTContext().getDefaultMethodCallConv() : CC_C; switch (CC) { default: - assert(0 && "Unsupported CC for mangling"); + llvm_unreachable("Unsupported CC for mangling"); case CC_Default: case CC_C: Out << 'A'; break; case CC_X86Pascal: Out << 'C'; break; @@ -890,7 +890,7 @@ void MicrosoftCXXNameMangler::mangleThrowSpecification( } void MicrosoftCXXNameMangler::mangleType(const UnresolvedUsingType *T) { - assert(false && "Don't know how to mangle UnresolvedUsingTypes yet!"); + llvm_unreachable("Don't know how to mangle UnresolvedUsingTypes yet!"); } // ::= | | | @@ -962,10 +962,10 @@ void MicrosoftCXXNameMangler::mangleExtraDimensions(QualType ElementTy) { Dimensions.push_back(CAT->getSize()); ElementTy = CAT->getElementType(); } else if (ElementTy->isVariableArrayType()) { - assert(false && "Don't know how to mangle VLAs!"); + llvm_unreachable("Don't know how to mangle VLAs!"); } else if (ElementTy->isDependentSizedArrayType()) { // The dependent expression has to be folded into a constant (TODO). - assert(false && "Don't know how to mangle dependent-sized arrays!"); + llvm_unreachable("Don't know how to mangle dependent-sized arrays!"); } else if (ElementTy->isIncompleteArrayType()) continue; else break; } @@ -999,12 +999,12 @@ void MicrosoftCXXNameMangler::mangleType(const MemberPointerType *T) { } void MicrosoftCXXNameMangler::mangleType(const TemplateTypeParmType *T) { - assert(false && "Don't know how to mangle TemplateTypeParmTypes yet!"); + llvm_unreachable("Don't know how to mangle TemplateTypeParmTypes yet!"); } void MicrosoftCXXNameMangler::mangleType( const SubstTemplateTypeParmPackType *T) { - assert(false && + llvm_unreachable( "Don't know how to mangle SubstTemplateTypeParmPackTypes yet!"); } @@ -1045,21 +1045,22 @@ void MicrosoftCXXNameMangler::mangleType(const LValueReferenceType *T) { } void MicrosoftCXXNameMangler::mangleType(const RValueReferenceType *T) { - assert(false && "Don't know how to mangle RValueReferenceTypes yet!"); + llvm_unreachable("Don't know how to mangle RValueReferenceTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const ComplexType *T) { - assert(false && "Don't know how to mangle ComplexTypes yet!"); + llvm_unreachable("Don't know how to mangle ComplexTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const VectorType *T) { - assert(false && "Don't know how to mangle VectorTypes yet!"); + llvm_unreachable("Don't know how to mangle VectorTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const ExtVectorType *T) { - assert(false && "Don't know how to mangle ExtVectorTypes yet!"); + llvm_unreachable("Don't know how to mangle ExtVectorTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const DependentSizedExtVectorType *T) { - assert(false && "Don't know how to mangle DependentSizedExtVectorTypes yet!"); + llvm_unreachable( + "Don't know how to mangle DependentSizedExtVectorTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const ObjCInterfaceType *T) { @@ -1080,45 +1081,45 @@ void MicrosoftCXXNameMangler::mangleType(const BlockPointerType *T) { } void MicrosoftCXXNameMangler::mangleType(const InjectedClassNameType *T) { - assert(false && "Don't know how to mangle InjectedClassNameTypes yet!"); + llvm_unreachable("Don't know how to mangle InjectedClassNameTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const TemplateSpecializationType *T) { - assert(false && "Don't know how to mangle TemplateSpecializationTypes yet!"); + llvm_unreachable("Don't know how to mangle TemplateSpecializationTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const DependentNameType *T) { - assert(false && "Don't know how to mangle DependentNameTypes yet!"); + llvm_unreachable("Don't know how to mangle DependentNameTypes yet!"); } void MicrosoftCXXNameMangler::mangleType( const DependentTemplateSpecializationType *T) { - assert(false && + llvm_unreachable( "Don't know how to mangle DependentTemplateSpecializationTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const PackExpansionType *T) { - assert(false && "Don't know how to mangle PackExpansionTypes yet!"); + llvm_unreachable("Don't know how to mangle PackExpansionTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const TypeOfType *T) { - assert(false && "Don't know how to mangle TypeOfTypes yet!"); + llvm_unreachable("Don't know how to mangle TypeOfTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const TypeOfExprType *T) { - assert(false && "Don't know how to mangle TypeOfExprTypes yet!"); + llvm_unreachable("Don't know how to mangle TypeOfExprTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const DecltypeType *T) { - assert(false && "Don't know how to mangle DecltypeTypes yet!"); + llvm_unreachable("Don't know how to mangle DecltypeTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const UnaryTransformType *T) { - assert(false && "Don't know how to mangle UnaryTransformationTypes yet!"); + llvm_unreachable("Don't know how to mangle UnaryTransformationTypes yet!"); } void MicrosoftCXXNameMangler::mangleType(const AutoType *T) { - assert(false && "Don't know how to mangle AutoTypes yet!"); + llvm_unreachable("Don't know how to mangle AutoTypes yet!"); } void MicrosoftMangleContext::mangleName(const NamedDecl *D, @@ -1138,17 +1139,17 @@ void MicrosoftMangleContext::mangleName(const NamedDecl *D, void MicrosoftMangleContext::mangleThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk, raw_ostream &) { - assert(false && "Can't yet mangle thunks!"); + llvm_unreachable("Can't yet mangle thunks!"); } void MicrosoftMangleContext::mangleCXXDtorThunk(const CXXDestructorDecl *DD, CXXDtorType Type, const ThisAdjustment &, raw_ostream &) { - assert(false && "Can't yet mangle destructor thunks!"); + llvm_unreachable("Can't yet mangle destructor thunks!"); } void MicrosoftMangleContext::mangleCXXVTable(const CXXRecordDecl *RD, raw_ostream &) { - assert(false && "Can't yet mangle virtual tables!"); + llvm_unreachable("Can't yet mangle virtual tables!"); } void MicrosoftMangleContext::mangleCXXVTT(const CXXRecordDecl *RD, raw_ostream &) { @@ -1162,25 +1163,25 @@ void MicrosoftMangleContext::mangleCXXCtorVTable(const CXXRecordDecl *RD, } void MicrosoftMangleContext::mangleCXXRTTI(QualType T, raw_ostream &) { - assert(false && "Can't yet mangle RTTI!"); + llvm_unreachable("Can't yet mangle RTTI!"); } void MicrosoftMangleContext::mangleCXXRTTIName(QualType T, raw_ostream &) { - assert(false && "Can't yet mangle RTTI names!"); + llvm_unreachable("Can't yet mangle RTTI names!"); } void MicrosoftMangleContext::mangleCXXCtor(const CXXConstructorDecl *D, CXXCtorType Type, raw_ostream &) { - assert(false && "Can't yet mangle constructors!"); + llvm_unreachable("Can't yet mangle constructors!"); } void MicrosoftMangleContext::mangleCXXDtor(const CXXDestructorDecl *D, CXXDtorType Type, raw_ostream &) { - assert(false && "Can't yet mangle destructors!"); + llvm_unreachable("Can't yet mangle destructors!"); } void MicrosoftMangleContext::mangleReferenceTemporary(const clang::VarDecl *, raw_ostream &) { - assert(false && "Can't yet mangle reference temporaries!"); + llvm_unreachable("Can't yet mangle reference temporaries!"); } MangleContext *clang::createMicrosoftMangleContext(ASTContext &Context, diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp index 473837b330..9357d9be67 100644 --- a/lib/AST/StmtDumper.cpp +++ b/lib/AST/StmtDumper.cpp @@ -294,7 +294,7 @@ void StmtDumper::DumpDeclarator(Decl *D) { DumpSubTree(SAD->getMessage()); OS << ");\""; } else { - assert(0 && "Unexpected decl"); + llvm_unreachable("Unexpected decl"); } } @@ -416,7 +416,7 @@ void StmtDumper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { void StmtDumper::VisitPredefinedExpr(PredefinedExpr *Node) { DumpExpr(Node); switch (Node->getIdentType()) { - default: assert(0 && "unknown case"); + default: llvm_unreachable("unknown case"); case PredefinedExpr::Func: OS << " __func__"; break; case PredefinedExpr::Function: OS << " __FUNCTION__"; break; case PredefinedExpr::PrettyFunction: OS << " __PRETTY_FUNCTION__";break; diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 79f14bc658..57a3e61e54 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -584,7 +584,7 @@ void StmtPrinter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) { void StmtPrinter::VisitPredefinedExpr(PredefinedExpr *Node) { switch (Node->getIdentType()) { default: - assert(0 && "unknown case"); + llvm_unreachable("unknown case"); case PredefinedExpr::Func: OS << "__func__"; break; @@ -658,7 +658,7 @@ void StmtPrinter::VisitIntegerLiteral(IntegerLiteral *Node) { // Emit suffixes. Integer literals are always a builtin integer type. switch (Node->getType()->getAs()->getKind()) { - default: assert(0 && "Unexpected type for integer literal!"); + default: llvm_unreachable("Unexpected type for integer literal!"); case BuiltinType::Int: break; // no suffix. case BuiltinType::UInt: OS << 'U'; break; case BuiltinType::Long: OS << 'L'; break; @@ -1051,7 +1051,7 @@ void StmtPrinter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) { OS << ' ' << OpStrings[Kind] << ' '; PrintExpr(Node->getArg(1)); } else { - assert(false && "unknown overloaded operator"); + llvm_unreachable("unknown overloaded operator"); } } diff --git a/lib/AST/TemplateBase.cpp b/lib/AST/TemplateBase.cpp index b963cec42c..b780012557 100644 --- a/lib/AST/TemplateBase.cpp +++ b/lib/AST/TemplateBase.cpp @@ -68,7 +68,7 @@ TemplateArgument TemplateArgument::CreatePackCopy(ASTContext &Context, bool TemplateArgument::isDependent() const { switch (getKind()) { case Null: - assert(false && "Should not have a NULL template argument"); + llvm_unreachable("Should not have a NULL template argument"); return false; case Type: @@ -107,7 +107,7 @@ bool TemplateArgument::isDependent() const { bool TemplateArgument::isInstantiationDependent() const { switch (getKind()) { case Null: - assert(false && "Should not have a NULL template argument"); + llvm_unreachable("Should not have a NULL template argument"); return false; case Type: diff --git a/lib/Analysis/CFG.cpp b/lib/Analysis/CFG.cpp index 0775dcfb79..0b2577dec4 100644 --- a/lib/Analysis/CFG.cpp +++ b/lib/Analysis/CFG.cpp @@ -3373,7 +3373,7 @@ public: OS << " && ..."; return; default: - assert(false && "Invalid logical operator."); + llvm_unreachable("Invalid logical operator."); } } @@ -3521,7 +3521,7 @@ static void print_block(raw_ostream &OS, const CFG* cfg, OS << ")"; } else - assert(false && "Invalid label statement in CFGBlock."); + llvm_unreachable("Invalid label statement in CFGBlock."); OS << ":\n"; } diff --git a/lib/Analysis/FormatString.cpp b/lib/Analysis/FormatString.cpp index 3550a5415c..3848c2c38f 100644 --- a/lib/Analysis/FormatString.cpp +++ b/lib/Analysis/FormatString.cpp @@ -209,7 +209,7 @@ clang::analyze_format_string::ParseLengthModifier(FormatSpecifier &FS, bool ArgTypeResult::matchesType(ASTContext &C, QualType argTy) const { switch (K) { case InvalidTy: - assert(false && "ArgTypeResult must be valid"); + llvm_unreachable("ArgTypeResult must be valid"); return true; case UnknownTy: @@ -312,7 +312,7 @@ bool ArgTypeResult::matchesType(ASTContext &C, QualType argTy) const { QualType ArgTypeResult::getRepresentativeType(ASTContext &C) const { switch (K) { case InvalidTy: - assert(false && "No representative type for Invalid ArgTypeResult"); + llvm_unreachable("No representative type for Invalid ArgTypeResult"); // Fall-through. case UnknownTy: return QualType(); diff --git a/lib/Analysis/PrintfFormatString.cpp b/lib/Analysis/PrintfFormatString.cpp index eb018f1eb5..770cd37e9c 100644 --- a/lib/Analysis/PrintfFormatString.cpp +++ b/lib/Analysis/PrintfFormatString.cpp @@ -461,7 +461,7 @@ bool PrintfSpecifier::fixType(QualType QT) { HasAlternativeForm = 0; HasPlusPrefix = 0; } else { - assert(0 && "Unexpected type"); + llvm_unreachable("Unexpected type"); } return true; diff --git a/lib/Basic/DiagnosticIDs.cpp b/lib/Basic/DiagnosticIDs.cpp index ace92aceb4..f7d147025c 100644 --- a/lib/Basic/DiagnosticIDs.cpp +++ b/lib/Basic/DiagnosticIDs.cpp @@ -494,7 +494,7 @@ DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, unsigned DiagClass, bool ShouldEmitInSystemHeader = false; switch (MappingInfo & 7) { - default: assert(0 && "Unknown mapping!"); + default: llvm_unreachable("Unknown mapping!"); case diag::MAP_IGNORE: if (Diag.EnableAllWarnings) { // Leave the warning disabled if it was explicitly ignored. diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index 32a1522928..7a7515f08f 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -87,7 +87,7 @@ TargetInfo::~TargetInfo() {} /// For example, SignedShort -> "short". const char *TargetInfo::getTypeName(IntType T) { switch (T) { - default: assert(0 && "not an integer!"); + default: llvm_unreachable("not an integer!"); case SignedShort: return "short"; case UnsignedShort: return "unsigned short"; case SignedInt: return "int"; @@ -103,7 +103,7 @@ const char *TargetInfo::getTypeName(IntType T) { /// integer type enum. For example, SignedLong -> "L". const char *TargetInfo::getTypeConstantSuffix(IntType T) { switch (T) { - default: assert(0 && "not an integer!"); + default: llvm_unreachable("not an integer!"); case SignedShort: case SignedInt: return ""; case SignedLong: return "L"; @@ -119,7 +119,7 @@ const char *TargetInfo::getTypeConstantSuffix(IntType T) { /// enum. For example, SignedInt -> getIntWidth(). unsigned TargetInfo::getTypeWidth(IntType T) const { switch (T) { - default: assert(0 && "not an integer!"); + default: llvm_unreachable("not an integer!"); case SignedShort: case UnsignedShort: return getShortWidth(); case SignedInt: @@ -135,7 +135,7 @@ unsigned TargetInfo::getTypeWidth(IntType T) const { /// enum. For example, SignedInt -> getIntAlign(). unsigned TargetInfo::getTypeAlign(IntType T) const { switch (T) { - default: assert(0 && "not an integer!"); + default: llvm_unreachable("not an integer!"); case SignedShort: case UnsignedShort: return getShortAlign(); case SignedInt: @@ -151,7 +151,7 @@ unsigned TargetInfo::getTypeAlign(IntType T) const { /// the type is signed; false otherwise. bool TargetInfo::isTypeSigned(IntType T) { switch (T) { - default: assert(0 && "not an integer!"); + default: llvm_unreachable("not an integer!"); case SignedShort: case SignedInt: case SignedLong: diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 5e25f69f41..abfd0a7625 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -2795,7 +2795,7 @@ public: else if (ABI == "eabi") Builder.defineMacro("__mips_eabi"); else - assert(false && "Invalid ABI for Mips32."); + llvm_unreachable("Invalid ABI for Mips32."); } virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, unsigned &NumAliases) const { @@ -2897,7 +2897,7 @@ public: Builder.defineMacro("_MIPS_SIM", "_ABI64"); } else - assert(false && "Invalid ABI for Mips64."); + llvm_unreachable("Invalid ABI for Mips64."); } virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, unsigned &NumAliases) const { diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index bdf3088112..8972b2f43d 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -152,7 +152,7 @@ static Value *EmitFAbs(CodeGenFunction &CGF, Value *V, QualType ValTy) { StringRef FnName; switch (ValTyP->getKind()) { - default: assert(0 && "Isn't a scalar fp type!"); + default: llvm_unreachable("Isn't a scalar fp type!"); case BuiltinType::Float: FnName = "fabsf"; break; case BuiltinType::Double: FnName = "fabs"; break; case BuiltinType::LongDouble: FnName = "fabsl"; break; @@ -396,7 +396,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, Value *RHS = EmitScalarExpr(E->getArg(1)); switch (BuiltinID) { - default: assert(0 && "Unknown ordered comparison"); + default: llvm_unreachable("Unknown ordered comparison"); case Builtin::BI__builtin_isgreater: LHS = Builder.CreateFCmpOGT(LHS, RHS, "cmp"); break; @@ -775,7 +775,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, case Builtin::BI__sync_lock_test_and_set: case Builtin::BI__sync_lock_release: case Builtin::BI__sync_swap: - assert(0 && "Shouldn't make it through sema"); + llvm_unreachable("Shouldn't make it through sema"); case Builtin::BI__sync_fetch_and_add_1: case Builtin::BI__sync_fetch_and_add_2: case Builtin::BI__sync_fetch_and_add_4: @@ -1541,7 +1541,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, case ARM::BI__builtin_neon_vld4_dup_v: Int = Intrinsic::arm_neon_vld2; break; - default: assert(0 && "unknown vld_dup intrinsic?"); + default: llvm_unreachable("unknown vld_dup intrinsic?"); } Function *F = CGM.getIntrinsic(Int, Ty); Value *Align = GetPointeeAlignment(*this, E->getArg(1)); @@ -1560,7 +1560,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, case ARM::BI__builtin_neon_vld4_dup_v: Int = Intrinsic::arm_neon_vld2lane; break; - default: assert(0 && "unknown vld_dup intrinsic?"); + default: llvm_unreachable("unknown vld_dup intrinsic?"); } Function *F = CGM.getIntrinsic(Int, Ty); llvm::StructType *STy = cast(F->getReturnType()); @@ -2013,7 +2013,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, Intrinsic::ID ID = Intrinsic::not_intrinsic; switch (BuiltinID) { - default: assert(0 && "Unsupported shift intrinsic!"); + default: llvm_unreachable("Unsupported shift intrinsic!"); case X86::BI__builtin_ia32_pslldi128: name = "pslldi"; ID = Intrinsic::x86_sse2_psll_d; @@ -2073,7 +2073,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, Intrinsic::ID ID = Intrinsic::not_intrinsic; switch (BuiltinID) { - default: assert(0 && "Unsupported shift intrinsic!"); + default: llvm_unreachable("Unsupported shift intrinsic!"); case X86::BI__builtin_ia32_pslldi: name = "pslldi"; ID = Intrinsic::x86_mmx_psll_d; @@ -2398,7 +2398,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID, Ops.pop_back(); switch (BuiltinID) { - default: assert(0 && "Unsupported ld/lvsl/lvsr intrinsic!"); + default: llvm_unreachable("Unsupported ld/lvsl/lvsr intrinsic!"); case PPC::BI__builtin_altivec_lvx: ID = Intrinsic::ppc_altivec_lvx; break; @@ -2437,7 +2437,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID, Ops.pop_back(); switch (BuiltinID) { - default: assert(0 && "Unsupported st intrinsic!"); + default: llvm_unreachable("Unsupported st intrinsic!"); case PPC::BI__builtin_altivec_stvx: ID = Intrinsic::ppc_altivec_stvx; break; diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 6e29543093..c246c3cb35 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -783,7 +783,7 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI, break; case ABIArgInfo::Expand: - assert(0 && "Invalid ABI kind for return argument"); + llvm_unreachable("Invalid ABI kind for return argument"); } if (RetAttrs) @@ -1243,7 +1243,7 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI) { break; case ABIArgInfo::Expand: - assert(0 && "Invalid ABI kind for return argument"); + llvm_unreachable("Invalid ABI kind for return argument"); } llvm::Instruction *Ret = RV ? Builder.CreateRet(RV) : Builder.CreateRetVoid(); @@ -1860,10 +1860,10 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, } case ABIArgInfo::Expand: - assert(0 && "Invalid ABI kind for return argument"); + llvm_unreachable("Invalid ABI kind for return argument"); } - assert(0 && "Unhandled ABIArgInfo::Kind"); + llvm_unreachable("Unhandled ABIArgInfo::Kind"); return RValue::get(0); } diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 89e14bafd0..04bf996acd 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -290,16 +290,16 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) { const char *BTName = NULL; switch (BT->getKind()) { case BuiltinType::Dependent: - assert(0 && "Unexpected builtin type Dependent"); + llvm_unreachable("Unexpected builtin type Dependent"); return llvm::DIType(); case BuiltinType::Overload: - assert(0 && "Unexpected builtin type Overload"); + llvm_unreachable("Unexpected builtin type Overload"); return llvm::DIType(); case BuiltinType::BoundMember: - assert(0 && "Unexpected builtin type BoundMember"); + llvm_unreachable("Unexpected builtin type BoundMember"); return llvm::DIType(); case BuiltinType::UnknownAny: - assert(0 && "Unexpected builtin type UnknownAny"); + llvm_unreachable("Unexpected builtin type UnknownAny"); return llvm::DIType(); case BuiltinType::NullPtr: return DBuilder. @@ -1543,7 +1543,7 @@ llvm::DIType CGDebugInfo::CreateTypeNode(QualType Ty, #define NON_CANONICAL_TYPE(Class, Base) #define DEPENDENT_TYPE(Class, Base) case Type::Class: #include "clang/AST/TypeNodes.def" - assert(false && "Dependent types cannot show up in debug information"); + llvm_unreachable("Dependent types cannot show up in debug information"); case Type::ExtVector: case Type::Vector: diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 46f3f6b177..b43ef4e5db 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -72,7 +72,7 @@ void CodeGenFunction::EmitDecl(const Decl &D) { case Decl::FriendTemplate: case Decl::Block: case Decl::ClassScopeFunctionSpecialization: - assert(0 && "Declaration should not be in declstmts!"); + llvm_unreachable("Declaration should not be in declstmts!"); case Decl::Function: // void X(); case Decl::Record: // struct/union/class X; case Decl::Enum: // enum X; @@ -136,7 +136,7 @@ void CodeGenFunction::EmitVarDecl(const VarDecl &D) { return CGM.getOpenCLRuntime().EmitWorkGroupLocalVarDecl(*this, D); } - assert(0 && "Unknown storage class"); + llvm_unreachable("Unknown storage class"); } static std::string GetStaticDeclName(CodeGenFunction &CGF, const VarDecl &D, @@ -158,14 +158,14 @@ static std::string GetStaticDeclName(CodeGenFunction &CGF, const VarDecl &D, ContextName = Name.getString(); } else - assert(0 && "Unknown context for block static var decl"); + llvm_unreachable("Unknown context for block static var decl"); } else if (const FunctionDecl *FD = dyn_cast(CGF.CurFuncDecl)) { StringRef Name = CGM.getMangledName(FD); ContextName = Name.str(); } else if (isa(CGF.CurFuncDecl)) ContextName = CGF.CurFn->getName(); else - assert(0 && "Unknown context for static var decl"); + llvm_unreachable("Unknown context for static var decl"); return ContextName + Separator + D.getNameAsString(); } diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 62be62b79e..f3996c9659 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -474,7 +474,8 @@ CodeGenFunction::EmitReferenceBindingToExpr(const Expr *E, else { switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { case Qualifiers::OCL_None: - assert(0 && "Not a reference temporary that needs to be deallocated"); + llvm_unreachable( + "Not a reference temporary that needs to be deallocated"); case Qualifiers::OCL_ExplicitNone: case Qualifiers::OCL_Autoreleasing: // Nothing to do. @@ -1196,7 +1197,7 @@ void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV, "tmp"); } else { // We should never shorten the vector - assert(0 && "unexpected shorten vector length"); + llvm_unreachable("unexpected shorten vector length"); } } else { // If the Src is a scalar (not a vector) it must be updating one element. @@ -1387,7 +1388,7 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { if (const FunctionDecl *fn = dyn_cast(ND)) return EmitFunctionDeclLValue(*this, E, fn); - assert(false && "Unhandled DeclRefExpr"); + llvm_unreachable("Unhandled DeclRefExpr"); // an invalid LValue, but the assert will // ensure that this point is never reached. @@ -1407,7 +1408,7 @@ LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); switch (E->getOpcode()) { - default: assert(0 && "Unknown unary operator lvalue!"); + default: llvm_unreachable("Unknown unary operator lvalue!"); case UO_Deref: { QualType T = E->getSubExpr()->getType()->getPointeeType(); assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type"); @@ -1483,7 +1484,7 @@ LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { std::string GlobalVarName; switch (Type) { - default: assert(0 && "Invalid type"); + default: llvm_unreachable("Invalid type"); case PredefinedExpr::Func: GlobalVarName = "__func__."; break; @@ -1793,7 +1794,7 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { if (const FunctionDecl *FD = dyn_cast(ND)) return EmitFunctionDeclLValue(*this, E, FD); - assert(false && "Unhandled member declaration!"); + llvm_unreachable("Unhandled member declaration!"); return LValue(); } diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index 856378b34f..c321faffcf 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -318,7 +318,7 @@ void AggExprEmitter::VisitCastExpr(CastExpr *E) { case CK_DerivedToBase: case CK_BaseToDerived: case CK_UncheckedDerivedToBase: { - assert(0 && "cannot perform hierarchy conversion in EmitAggExpr: " + llvm_unreachable("cannot perform hierarchy conversion in EmitAggExpr: " "should have been unpacked before we got here"); break; } diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp index a92a7ad33e..13c96d4fae 100644 --- a/lib/CodeGen/CGExprComplex.cpp +++ b/lib/CodeGen/CGExprComplex.cpp @@ -103,7 +103,7 @@ public: ComplexPairTy VisitStmt(Stmt *S) { S->dump(CGF.getContext().getSourceManager()); - assert(0 && "Stmt can't have complex result type!"); + llvm_unreachable("Stmt can't have complex result type!"); return ComplexPairTy(); } ComplexPairTy VisitExpr(Expr *S); diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index d7dfa253ad..2de13a4090 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -780,7 +780,7 @@ public: if (ILE->getType()->isVectorType()) return 0; - assert(0 && "Unable to handle InitListExpr"); + llvm_unreachable("Unable to handle InitListExpr"); // Get rid of control reaches end of void function warning. // Not reached. return 0; @@ -966,7 +966,7 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, if (Success && !Result.HasSideEffects) { switch (Result.Val.getKind()) { case APValue::Uninitialized: - assert(0 && "Constant expressions should be initialized."); + llvm_unreachable("Constant expressions should be initialized."); return 0; case APValue::LValue: { llvm::Type *DestTy = getTypes().ConvertTypeForMem(DestType); diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 01acd42a06..90e1232715 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -153,7 +153,7 @@ public: Value *VisitStmt(Stmt *S) { S->dump(CGF.getContext().getSourceManager()); - assert(0 && "Stmt can't have complex result type!"); + llvm_unreachable("Stmt can't have complex result type!"); return 0; } Value *VisitExpr(Expr *S); @@ -1266,7 +1266,7 @@ EmitAddConsiderOverflowBehavior(const UnaryOperator *E, return EmitOverflowCheckedBinOp(BinOp); break; } - assert(false && "Unknown SignedOverflowBehaviorTy"); + llvm_unreachable("Unknown SignedOverflowBehaviorTy"); return 0; } @@ -1780,7 +1780,7 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { IID = llvm::Intrinsic::smul_with_overflow; break; default: - assert(false && "Unsupported operation for overflow detection"); + llvm_unreachable("Unsupported operation for overflow detection"); IID = 0; } OpID <<= 1; @@ -2076,7 +2076,7 @@ enum IntrinsicType { VCMPEQ, VCMPGT }; static llvm::Intrinsic::ID GetIntrinsic(IntrinsicType IT, BuiltinType::Kind ElemKind) { switch (ElemKind) { - default: assert(0 && "unexpected element type"); + default: llvm_unreachable("unexpected element type"); case BuiltinType::Char_U: case BuiltinType::UChar: return (IT == VCMPEQ) ? llvm::Intrinsic::ppc_altivec_vcmpequb_p : @@ -2146,7 +2146,7 @@ Value *ScalarExprEmitter::EmitCompare(const BinaryOperator *E,unsigned UICmpOpc, BuiltinType::Kind ElementKind = BTy->getKind(); switch(E->getOpcode()) { - default: assert(0 && "is not a comparison operation"); + default: llvm_unreachable("is not a comparison operation"); case BO_EQ: CR6 = CR6_LT; ID = GetIntrinsic(VCMPEQ, ElementKind); @@ -2755,7 +2755,7 @@ LValue CodeGenFunction::EmitCompoundAssignmentLValue( case BO_LOr: case BO_Assign: case BO_Comma: - assert(false && "Not valid compound assignment operators"); + llvm_unreachable("Not valid compound assignment operators"); break; } diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index b7855c85a2..bdc11d2ce7 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -2333,7 +2333,7 @@ void CGObjCGNU::EmitObjCGlobalAssign(CodeGenFunction &CGF, B.CreateCall2(GlobalAssignFn, src, dst); else // FIXME. Add threadloca assign API - assert(false && "EmitObjCGlobalAssign - Threal Local API NYI"); + llvm_unreachable("EmitObjCGlobalAssign - Threal Local API NYI"); } void CGObjCGNU::EmitObjCIvarAssign(CodeGenFunction &CGF, diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 665b7f97c2..be574b3efe 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -1060,7 +1060,7 @@ public: /// GetClassGlobal - Return the global variable for the Objective-C /// class of the given name. virtual llvm::GlobalVariable *GetClassGlobal(const std::string &Name) { - assert(false && "CGObjCMac::GetClassGlobal"); + llvm_unreachable("CGObjCMac::GetClassGlobal"); return 0; } }; diff --git a/lib/CodeGen/CGObjCRuntime.h b/lib/CodeGen/CGObjCRuntime.h index 7accc70c96..4fa47a740a 100644 --- a/lib/CodeGen/CGObjCRuntime.h +++ b/lib/CodeGen/CGObjCRuntime.h @@ -208,8 +208,7 @@ public: virtual llvm::Value *EmitNSAutoreleasePoolClassRef(CGBuilderTy &Builder) { - assert(false &&"autoreleasepool unsupported in this ABI"); - return 0; + llvm_unreachable("autoreleasepool unsupported in this ABI"); } /// EnumerationMutationFunction - Return the function that's called by the diff --git a/lib/CodeGen/CGRTTI.cpp b/lib/CodeGen/CGRTTI.cpp index 2e3d966ab4..1ce69d6093 100644 --- a/lib/CodeGen/CGRTTI.cpp +++ b/lib/CodeGen/CGRTTI.cpp @@ -203,7 +203,7 @@ static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) { case BuiltinType::ObjCId: case BuiltinType::ObjCClass: case BuiltinType::ObjCSel: - assert(false && "FIXME: Objective-C types are unsupported!"); + llvm_unreachable("FIXME: Objective-C types are unsupported!"); } // Silent gcc. @@ -393,11 +393,11 @@ void RTTIBuilder::BuildVTablePointer(const Type *Ty) { #define NON_CANONICAL_TYPE(Class, Base) case Type::Class: #define DEPENDENT_TYPE(Class, Base) case Type::Class: #include "clang/AST/TypeNodes.def" - assert(false && "Non-canonical and dependent types shouldn't get here"); + llvm_unreachable("Non-canonical and dependent types shouldn't get here"); case Type::LValueReference: case Type::RValueReference: - assert(false && "References shouldn't get here"); + llvm_unreachable("References shouldn't get here"); case Type::Builtin: // GCC treats vector and complex types as fundamental types. @@ -590,7 +590,7 @@ llvm::Constant *RTTIBuilder::BuildTypeInfo(QualType Ty, bool Force) { #define NON_CANONICAL_TYPE(Class, Base) case Type::Class: #define DEPENDENT_TYPE(Class, Base) case Type::Class: #include "clang/AST/TypeNodes.def" - assert(false && "Non-canonical and dependent types shouldn't get here"); + llvm_unreachable("Non-canonical and dependent types shouldn't get here"); // GCC treats vector types as fundamental types. case Type::Builtin: @@ -604,7 +604,7 @@ llvm::Constant *RTTIBuilder::BuildTypeInfo(QualType Ty, bool Force) { case Type::LValueReference: case Type::RValueReference: - assert(false && "References shouldn't get here"); + llvm_unreachable("References shouldn't get here"); case Type::ConstantArray: case Type::IncompleteArray: diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 461a173f53..3f986bd1cd 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -137,10 +137,12 @@ void CodeGenFunction::EmitStmt(const Stmt *S) { EmitObjCAtTryStmt(cast(*S)); break; case Stmt::ObjCAtCatchStmtClass: - assert(0 && "@catch statements should be handled by EmitObjCAtTryStmt"); + llvm_unreachable( + "@catch statements should be handled by EmitObjCAtTryStmt"); break; case Stmt::ObjCAtFinallyStmtClass: - assert(0 && "@finally statements should be handled by EmitObjCAtTryStmt"); + llvm_unreachable( + "@finally statements should be handled by EmitObjCAtTryStmt"); break; case Stmt::ObjCAtThrowStmtClass: EmitObjCAtThrowStmt(cast(*S)); diff --git a/lib/CodeGen/CGVTables.cpp b/lib/CodeGen/CGVTables.cpp index 4743d57937..1a210faa33 100644 --- a/lib/CodeGen/CGVTables.cpp +++ b/lib/CodeGen/CGVTables.cpp @@ -263,7 +263,7 @@ static BaseOffset ComputeBaseOffset(ASTContext &Context, if (!const_cast(DerivedRD)-> isDerivedFrom(const_cast(BaseRD), Paths)) { - assert(false && "Class must be derived from the passed in base class!"); + llvm_unreachable("Class must be derived from the passed in base class!"); return BaseOffset(); } @@ -303,7 +303,7 @@ ComputeReturnAdjustmentBaseOffset(ASTContext &Context, CanBaseReturnType = CanBaseReturnType->getAs()->getPointeeType(); } else { - assert(false && "Unexpected return type!"); + llvm_unreachable("Unexpected return type!"); } // We need to compare unqualified types here; consider @@ -700,7 +700,7 @@ CharUnits VCallOffsetMap::getVCallOffsetOffset(const CXXMethodDecl *MD) { return Offsets[I].second; } - assert(false && "Should always find a vcall offset offset!"); + llvm_unreachable("Should always find a vcall offset offset!"); return CharUnits::Zero(); } @@ -1361,7 +1361,7 @@ VTableBuilder::ComputeThisAdjustmentBaseOffset(BaseSubobject Base, if (!const_cast(DerivedRD)-> isDerivedFrom(const_cast(BaseRD), Paths)) { - assert(false && "Class must be derived from the passed in base class!"); + llvm_unreachable("Class must be derived from the passed in base class!"); return BaseOffset(); } @@ -1553,7 +1553,7 @@ VTableBuilder::IsOverriderUsed(const CXXMethodDecl *Overrider, } if (!PrimaryBases.insert(PrimaryBase)) - assert(false && "Found a duplicate primary base!"); + llvm_unreachable("Found a duplicate primary base!"); RD = PrimaryBase; } @@ -1627,7 +1627,7 @@ VTableBuilder::AddMethods(BaseSubobject Base, CharUnits BaseOffsetInLayoutClass, FirstBaseOffsetInLayoutClass, PrimaryBases); if (!PrimaryBases.insert(PrimaryBase)) - assert(false && "Found a duplicate primary base!"); + llvm_unreachable("Found a duplicate primary base!"); } // Now go through all virtual member functions and add them. @@ -2316,7 +2316,7 @@ CollectPrimaryBases(const CXXRecordDecl *RD, ASTContext &Context, CollectPrimaryBases(PrimaryBase, Context, PrimaryBases); if (!PrimaryBases.insert(PrimaryBase)) - assert(false && "Found a duplicate primary base!"); + llvm_unreachable("Found a duplicate primary base!"); } void CodeGenVTables::ComputeMethodVTableIndices(const CXXRecordDecl *RD) { diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index 54d3cb643f..3251b76742 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -275,7 +275,7 @@ static raw_ostream *GetOutputStream(CompilerInstance &CI, return CI.createDefaultOutputFile(true, InFile, "o"); } - assert(0 && "Invalid action!"); + llvm_unreachable("Invalid action!"); return 0; } diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 1943a744c9..e4633f9a74 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -850,7 +850,7 @@ void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) { if (const VarDecl *VD = dyn_cast(D)) return EmitGlobalVarDefinition(VD); - assert(0 && "Invalid argument to EmitGlobalDefinition()"); + llvm_unreachable("Invalid argument to EmitGlobalDefinition()"); } /// GetOrCreateLLVMFunction - If the specified mangled name is not in the diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp index c96a7f3a51..8742f5999b 100644 --- a/lib/CodeGen/CodeGenTypes.cpp +++ b/lib/CodeGen/CodeGenTypes.cpp @@ -273,7 +273,7 @@ static llvm::Type *getTypeForFormat(llvm::LLVMContext &VMContext, return llvm::Type::getPPC_FP128Ty(VMContext); if (&format == &llvm::APFloat::x87DoubleExtended) return llvm::Type::getX86_FP80Ty(VMContext); - assert(0 && "Unknown float format!"); + llvm_unreachable("Unknown float format!"); return 0; } diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index bad8a1d928..02e6a3be38 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -1706,7 +1706,7 @@ classifyReturnType(QualType RetTy) const { case SSEUp: case X87Up: - assert(0 && "Invalid classification for lo word."); + llvm_unreachable("Invalid classification for lo word."); // AMD64-ABI 3.2.3p4: Rule 2. Types of class memory are returned via // hidden argument. @@ -1760,7 +1760,7 @@ classifyReturnType(QualType RetTy) const { // never occur as a hi class. case Memory: case X87: - assert(0 && "Invalid classification for hi word."); + llvm_unreachable("Invalid classification for hi word."); case ComplexX87: // Previously handled. case NoClass: @@ -1848,7 +1848,7 @@ ABIArgInfo X86_64ABIInfo::classifyArgumentType(QualType Ty, unsigned &neededInt, case SSEUp: case X87Up: - assert(0 && "Invalid classification for lo word."); + llvm_unreachable("Invalid classification for lo word."); // AMD64-ABI 3.2.3p3: Rule 2. If the class is INTEGER, the next // available register of the sequence %rdi, %rsi, %rdx, %rcx, %r8 @@ -1892,7 +1892,7 @@ ABIArgInfo X86_64ABIInfo::classifyArgumentType(QualType Ty, unsigned &neededInt, case Memory: case X87: case ComplexX87: - assert(0 && "Invalid classification for hi word."); + llvm_unreachable("Invalid classification for hi word."); break; case NoClass: break; diff --git a/lib/Driver/Action.cpp b/lib/Driver/Action.cpp index ac95446e5b..65faa4ecee 100644 --- a/lib/Driver/Action.cpp +++ b/lib/Driver/Action.cpp @@ -34,7 +34,7 @@ const char *Action::getClassName(ActionClass AC) { case VerifyJobClass: return "verify"; } - assert(0 && "invalid class"); + llvm_unreachable("invalid class"); return 0; } diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index d77ae9229c..d82c93a885 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -1076,7 +1076,7 @@ Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase, llvm::PrettyStackTraceString CrashInfo("Constructing phase actions"); // Build the appropriate action. switch (Phase) { - case phases::Link: assert(0 && "link action invalid here."); + case phases::Link: llvm_unreachable("link action invalid here."); case phases::Preprocess: { types::ID OutputTy; // -{M, MM} alter the output type. @@ -1112,7 +1112,7 @@ Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase, return new AssembleJobAction(Input, types::TY_Object); } - assert(0 && "invalid phase in ConstructPhaseAction"); + llvm_unreachable("invalid phase in ConstructPhaseAction"); return 0; } diff --git a/lib/Driver/OptTable.cpp b/lib/Driver/OptTable.cpp index 780ea564db..81e2022c0f 100644 --- a/lib/Driver/OptTable.cpp +++ b/lib/Driver/OptTable.cpp @@ -116,7 +116,7 @@ OptTable::OptTable(const Info *_OptionInfos, unsigned _NumOptionInfos) if (!(getInfo(i) < getInfo(i + 1))) { getOption(i)->dump(); getOption(i + 1)->dump(); - assert(0 && "Options are not in order!"); + llvm_unreachable("Options are not in order!"); } } #endif @@ -268,10 +268,10 @@ static std::string getOptionHelpName(const OptTable &Opts, OptSpecifier Id) { // Add metavar, if used. switch (Opts.getOptionKind(Id)) { case Option::GroupClass: case Option::InputClass: case Option::UnknownClass: - assert(0 && "Invalid option with help text."); + llvm_unreachable("Invalid option with help text."); case Option::MultiArgClass: - assert(0 && "Cannot print metavar for this kind of option."); + llvm_unreachable("Cannot print metavar for this kind of option."); case Option::FlagClass: break; diff --git a/lib/Driver/Option.cpp b/lib/Driver/Option.cpp index 90d21a3d0b..f1ef7ab175 100644 --- a/lib/Driver/Option.cpp +++ b/lib/Driver/Option.cpp @@ -61,7 +61,7 @@ void Option::dump() const { llvm::errs() << "<"; switch (Kind) { default: - assert(0 && "Invalid kind"); + llvm_unreachable("Invalid kind"); #define P(N) case N: llvm::errs() << #N; break P(GroupClass); P(InputClass); @@ -114,7 +114,7 @@ OptionGroup::OptionGroup(OptSpecifier ID, const char *Name, } Arg *OptionGroup::accept(const ArgList &Args, unsigned &Index) const { - assert(0 && "accept() should never be called on an OptionGroup"); + llvm_unreachable("accept() should never be called on an OptionGroup"); return 0; } @@ -123,7 +123,7 @@ InputOption::InputOption(OptSpecifier ID) } Arg *InputOption::accept(const ArgList &Args, unsigned &Index) const { - assert(0 && "accept() should never be called on an InputOption"); + llvm_unreachable("accept() should never be called on an InputOption"); return 0; } @@ -132,7 +132,7 @@ UnknownOption::UnknownOption(OptSpecifier ID) } Arg *UnknownOption::accept(const ArgList &Args, unsigned &Index) const { - assert(0 && "accept() should never be called on an UnknownOption"); + llvm_unreachable("accept() should never be called on an UnknownOption"); return 0; } diff --git a/lib/Driver/Phases.cpp b/lib/Driver/Phases.cpp index f36000214a..d7f6ab9447 100644 --- a/lib/Driver/Phases.cpp +++ b/lib/Driver/Phases.cpp @@ -22,6 +22,6 @@ const char *phases::getPhaseName(ID Id) { case Link: return "linker"; } - assert(0 && "Invalid phase id."); + llvm_unreachable("Invalid phase id."); return 0; } diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 92c3ec9539..b11fc89aa6 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -243,7 +243,7 @@ Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA, switch (Key) { case Action::InputClass: case Action::BindArchClass: - assert(0 && "Invalid tool kind."); + llvm_unreachable("Invalid tool kind."); case Action::PreprocessJobClass: T = new tools::darwin::Preprocess(*this); break; case Action::AnalyzeJobClass: @@ -323,7 +323,7 @@ void DarwinClang::AddLinkSearchPathArgs(const ArgList &Args, P.appendComponent("gcc"); switch (getTriple().getArch()) { default: - assert(0 && "Invalid Darwin arch!"); + llvm_unreachable("Invalid Darwin arch!"); case llvm::Triple::x86: case llvm::Triple::x86_64: P.appendComponent("i686-apple-darwin10"); @@ -1002,7 +1002,7 @@ Tool &Generic_GCC::SelectTool(const Compilation &C, switch (Key) { case Action::InputClass: case Action::BindArchClass: - assert(0 && "Invalid tool kind."); + llvm_unreachable("Invalid tool kind."); case Action::PreprocessJobClass: T = new tools::gcc::Preprocess(*this); break; case Action::PrecompileJobClass: @@ -1093,7 +1093,7 @@ Tool &TCEToolChain::SelectTool(const Compilation &C, case Action::AnalyzeJobClass: T = new tools::Clang(*this); break; default: - assert(false && "Unsupported action for TCE target."); + llvm_unreachable("Unsupported action for TCE target."); } } return *T; @@ -1805,7 +1805,7 @@ Tool &Windows::SelectTool(const Compilation &C, const JobAction &JA, case Action::LipoJobClass: case Action::DsymutilJobClass: case Action::VerifyJobClass: - assert(0 && "Invalid tool kind."); + llvm_unreachable("Invalid tool kind."); case Action::PreprocessJobClass: case Action::PrecompileJobClass: case Action::AnalyzeJobClass: diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index c3c07f412f..dba4c22d7d 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2477,7 +2477,7 @@ void gcc::Link::RenderExtraToolArgs(const JobAction &JA, const char *darwin::CC1::getCC1Name(types::ID Type) const { switch (Type) { default: - assert(0 && "Unexpected type for Darwin CC1 tool."); + llvm_unreachable("Unexpected type for Darwin CC1 tool."); case types::TY_Asm: case types::TY_C: case types::TY_CHeader: case types::TY_PP_C: case types::TY_PP_CHeader: diff --git a/lib/Frontend/ASTConsumers.cpp b/lib/Frontend/ASTConsumers.cpp index 6412727cd7..70baf74545 100644 --- a/lib/Frontend/ASTConsumers.cpp +++ b/lib/Frontend/ASTConsumers.cpp @@ -286,7 +286,7 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC, } default: - assert(0 && "a decl that inherits DeclContext isn't handled"); + llvm_unreachable("a decl that inherits DeclContext isn't handled"); } Out << "\n"; @@ -392,7 +392,7 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC, } default: Out << "DeclKind: " << DK << '"' << *I << "\"\n"; - assert(0 && "decl unhandled"); + llvm_unreachable("decl unhandled"); } } } diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index e699261379..03d06e63d3 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1164,7 +1164,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, if (const Arg *A = Args.getLastArg(OPT_Action_Group)) { switch (A->getOption().getID()) { default: - assert(0 && "Invalid option in group!"); + llvm_unreachable("Invalid option in group!"); case OPT_ast_dump: Opts.ProgramAction = frontend::ASTDump; break; case OPT_ast_dump_xml: @@ -1457,7 +1457,7 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, case IK_None: case IK_AST: case IK_LLVM_IR: - assert(0 && "Invalid input kind!"); + llvm_unreachable("Invalid input kind!"); case IK_OpenCL: LangStd = LangStandard::lang_opencl; break; diff --git a/lib/Frontend/TextDiagnosticBuffer.cpp b/lib/Frontend/TextDiagnosticBuffer.cpp index 069c86de13..c03ac54411 100644 --- a/lib/Frontend/TextDiagnosticBuffer.cpp +++ b/lib/Frontend/TextDiagnosticBuffer.cpp @@ -26,7 +26,8 @@ void TextDiagnosticBuffer::HandleDiagnostic(Diagnostic::Level Level, llvm::SmallString<100> Buf; Info.FormatDiagnostic(Buf); switch (Level) { - default: assert(0 && "Diagnostic not handled during diagnostic buffering!"); + default: llvm_unreachable( + "Diagnostic not handled during diagnostic buffering!"); case Diagnostic::Note: Notes.push_back(std::make_pair(Info.getLocation(), Buf.str())); break; diff --git a/lib/Frontend/TextDiagnosticPrinter.cpp b/lib/Frontend/TextDiagnosticPrinter.cpp index 4fc694978c..762a7c528c 100644 --- a/lib/Frontend/TextDiagnosticPrinter.cpp +++ b/lib/Frontend/TextDiagnosticPrinter.cpp @@ -1083,7 +1083,7 @@ void TextDiagnosticPrinter::HandleDiagnostic(Diagnostic::Level Level, if (DiagOpts->ShowColors) { // Print diagnostic category in bold and color switch (Level) { - case Diagnostic::Ignored: assert(0 && "Invalid diagnostic type"); + case Diagnostic::Ignored: llvm_unreachable("Invalid diagnostic type"); case Diagnostic::Note: OS.changeColor(noteColor, true); break; case Diagnostic::Warning: OS.changeColor(warningColor, true); break; case Diagnostic::Error: OS.changeColor(errorColor, true); break; @@ -1092,7 +1092,7 @@ void TextDiagnosticPrinter::HandleDiagnostic(Diagnostic::Level Level, } switch (Level) { - case Diagnostic::Ignored: assert(0 && "Invalid diagnostic type"); + case Diagnostic::Ignored: llvm_unreachable("Invalid diagnostic type"); case Diagnostic::Note: OS << "note: "; break; case Diagnostic::Warning: OS << "warning: "; break; case Diagnostic::Error: OS << "error: "; break; diff --git a/lib/Index/ASTLocation.cpp b/lib/Index/ASTLocation.cpp index 8ea49c16f8..6746004bc7 100644 --- a/lib/Index/ASTLocation.cpp +++ b/lib/Index/ASTLocation.cpp @@ -41,7 +41,7 @@ Decl *ASTLocation::getReferencedDecl() { return 0; switch (getKind()) { - default: assert(0 && "Invalid Kind"); + default: llvm_unreachable("Invalid Kind"); case N_Type: return 0; case N_Decl: @@ -60,7 +60,7 @@ SourceRange ASTLocation::getSourceRange() const { return SourceRange(); switch (getKind()) { - default: assert(0 && "Invalid Kind"); + default: llvm_unreachable("Invalid Kind"); return SourceRange(); case N_Decl: return D->getSourceRange(); diff --git a/lib/Lex/LiteralSupport.cpp b/lib/Lex/LiteralSupport.cpp index 986a08a3ce..4496834def 100644 --- a/lib/Lex/LiteralSupport.cpp +++ b/lib/Lex/LiteralSupport.cpp @@ -30,7 +30,7 @@ static int HexDigitValue(char C) { static unsigned getCharWidth(tok::TokenKind kind, const TargetInfo &Target) { switch (kind) { - default: assert(0 && "Unknown token type!"); + default: llvm_unreachable("Unknown token type!"); case tok::char_constant: case tok::string_literal: case tok::utf8_string_literal: diff --git a/lib/Lex/PPExpressions.cpp b/lib/Lex/PPExpressions.cpp index 2f810973b1..120b2ca034 100644 --- a/lib/Lex/PPExpressions.cpp +++ b/lib/Lex/PPExpressions.cpp @@ -535,7 +535,7 @@ static bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, bool Overflow = false; switch (Operator) { - default: assert(0 && "Unknown operator token!"); + default: llvm_unreachable("Unknown operator token!"); case tok::percent: if (RHS.Val != 0) Res = LHS.Val % RHS.Val; diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp index 9a16d584ab..ce4c1ed7df 100644 --- a/lib/Lex/PPMacroExpansion.cpp +++ b/lib/Lex/PPMacroExpansion.cpp @@ -1015,7 +1015,7 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) { OS << (int)Value; Tok.setKind(tok::numeric_constant); } else { - assert(0 && "Unknown identifier!"); + llvm_unreachable("Unknown identifier!"); } CreateString(OS.str().data(), OS.str().size(), Tok, Tok.getLocation()); } diff --git a/lib/Lex/Pragma.cpp b/lib/Lex/Pragma.cpp index 5a2f5cbade..d855baf9e2 100644 --- a/lib/Lex/Pragma.cpp +++ b/lib/Lex/Pragma.cpp @@ -804,7 +804,7 @@ struct PragmaDebugHandler : public PragmaHandler { IdentifierInfo *II = Tok.getIdentifierInfo(); if (II->isStr("assert")) { - assert(0 && "This is an assertion!"); + llvm_unreachable("This is an assertion!"); } else if (II->isStr("crash")) { *(volatile int*) 0x11 = 0; } else if (II->isStr("llvm_fatal_error")) { diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index f1c6d1256d..738040103f 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -1585,7 +1585,7 @@ ExprResult Parser::ParseBuiltinPrimaryExpression() { // TODO: Build AST. switch (T) { - default: assert(0 && "Not a builtin primary expression!"); + default: llvm_unreachable("Not a builtin primary expression!"); case tok::kw___builtin_va_arg: { ExprResult Expr(ParseAssignmentExpression()); diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index baec6fdd73..c575507c55 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/lib/Parse/ParseExprCXX.cpp @@ -29,7 +29,7 @@ static int SelectDigraphErrorMessage(tok::TokenKind Kind) { case tok::kw_reinterpret_cast: return 3; case tok::kw_static_cast: return 4; default: - assert(0 && "Unknown type for digraph error message."); + llvm_unreachable("Unknown type for digraph error message."); return -1; } } @@ -784,7 +784,7 @@ ExprResult Parser::ParseCXXCasts() { const char *CastName = 0; // For error messages switch (Kind) { - default: assert(0 && "Unknown C++ cast!"); abort(); + default: llvm_unreachable("Unknown C++ cast!"); abort(); case tok::kw_const_cast: CastName = "const_cast"; break; case tok::kw_dynamic_cast: CastName = "dynamic_cast"; break; case tok::kw_reinterpret_cast: CastName = "reinterpret_cast"; break; @@ -1289,9 +1289,9 @@ void Parser::ParseCXXSimpleTypeSpecifier(DeclSpec &DS) { switch (Tok.getKind()) { case tok::identifier: // foo::bar case tok::coloncolon: // ::foo::bar - assert(0 && "Annotation token should already be formed!"); + llvm_unreachable("Annotation token should already be formed!"); default: - assert(0 && "Not a simple-type-specifier token!"); + llvm_unreachable("Not a simple-type-specifier token!"); abort(); // type-name @@ -2200,7 +2200,7 @@ Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) { static UnaryTypeTrait UnaryTypeTraitFromTokKind(tok::TokenKind kind) { switch(kind) { - default: assert(false && "Not a known unary type trait."); + default: llvm_unreachable("Not a known unary type trait."); case tok::kw___has_nothrow_assign: return UTT_HasNothrowAssign; case tok::kw___has_nothrow_constructor: return UTT_HasNothrowConstructor; case tok::kw___has_nothrow_copy: return UTT_HasNothrowCopy; @@ -2268,7 +2268,7 @@ static ArrayTypeTrait ArrayTypeTraitFromTokKind(tok::TokenKind kind) { static ExpressionTrait ExpressionTraitFromTokKind(tok::TokenKind kind) { switch(kind) { - default: assert(false && "Not a known unary expression trait."); + default: llvm_unreachable("Not a known unary expression trait."); case tok::kw___is_lvalue_expr: return ET_IsLValueExpr; case tok::kw___is_rvalue_expr: return ET_IsRValueExpr; } diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index a8bf422766..a9c2a755f9 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -761,7 +761,7 @@ void Parser::ParseObjCTypeQualifierList(ObjCDeclSpec &DS, ObjCDeclSpec::ObjCDeclQualifier Qual; switch (i) { - default: assert(0 && "Unknown decl qualifier"); + default: llvm_unreachable("Unknown decl qualifier"); case objc_in: Qual = ObjCDeclSpec::DQ_In; break; case objc_out: Qual = ObjCDeclSpec::DQ_Out; break; case objc_inout: Qual = ObjCDeclSpec::DQ_Inout; break; diff --git a/lib/Rewrite/RewriteObjC.cpp b/lib/Rewrite/RewriteObjC.cpp index fa287fd534..4f9c1748ce 100644 --- a/lib/Rewrite/RewriteObjC.cpp +++ b/lib/Rewrite/RewriteObjC.cpp @@ -1066,7 +1066,7 @@ void RewriteObjC::RewriteProtocolDecl(ObjCProtocolDecl *PDecl) { void RewriteObjC::RewriteForwardProtocolDecl(ObjCForwardProtocolDecl *PDecl) { SourceLocation LocStart = PDecl->getLocation(); if (LocStart.isInvalid()) - assert(false && "Invalid SourceLocation"); + llvm_unreachable("Invalid SourceLocation"); // FIXME: handle forward protocol that are declared across multiple lines. ReplaceText(LocStart, 0, "// "); } @@ -2063,7 +2063,7 @@ Stmt *RewriteObjC::RewriteObjCTryStmt(ObjCAtTryStmt *S) { // declares the @catch parameter). ReplaceText(rParenLoc, bodyBuf-rParenBuf+1, " = _caught;"); } else { - assert(false && "@catch rewrite bug"); + llvm_unreachable("@catch rewrite bug"); } } // Complete the catch list... @@ -3434,7 +3434,7 @@ void RewriteObjC::SynthesizeObjCInternalStruct(ObjCInterfaceDecl *CDecl, } // Mark this struct as having been generated. if (!ObjCSynthesizedStructs.insert(CDecl)) - assert(false && "struct already synthesize- SynthesizeObjCInternalStruct"); + llvm_unreachable("struct already synthesize- SynthesizeObjCInternalStruct"); } // RewriteObjCMethodsMetaData - Rewrite methods metadata for instance or @@ -3655,7 +3655,7 @@ RewriteObjCProtocolMetaData(ObjCProtocolDecl *PDecl, StringRef prefix, // Mark this protocol as having been generated. if (!ObjCSynthesizedProtocols.insert(PDecl)) - assert(false && "protocol already synthesized"); + llvm_unreachable("protocol already synthesized"); } @@ -5048,7 +5048,7 @@ void RewriteObjC::RewriteBlockPointerDecl(NamedDecl *ND) { else if (FieldDecl *FD = dyn_cast(ND)) DeclT = FD->getType(); else - assert(0 && "RewriteBlockPointerDecl(): Decl type not yet handled"); + llvm_unreachable("RewriteBlockPointerDecl(): Decl type not yet handled"); const char *startBuf = SM->getCharacterData(DeclLoc); const char *endBuf = startBuf; @@ -5966,7 +5966,7 @@ void RewriteObjC::HandleDeclInMainFile(Decl *D) { else if (ObjCCategoryImplDecl *CI = dyn_cast(D)) CategoryImplementation.push_back(CI); else if (isa(D)) - assert(false && "RewriteObjC::HandleDeclInMainFile - ObjCClassDecl"); + llvm_unreachable("RewriteObjC::HandleDeclInMainFile - ObjCClassDecl"); else if (VarDecl *VD = dyn_cast(D)) { RewriteObjCQualifiedInterfaceTypes(VD); if (isTopLevelBlockPointerType(VD->getType())) diff --git a/lib/Sema/DeclSpec.cpp b/lib/Sema/DeclSpec.cpp index fad1199613..7e2f4ad281 100644 --- a/lib/Sema/DeclSpec.cpp +++ b/lib/Sema/DeclSpec.cpp @@ -650,7 +650,7 @@ bool DeclSpec::SetTypeQual(TQ T, SourceLocation Loc, const char *&PrevSpec, TypeQualifiers |= T; switch (T) { - default: assert(0 && "Unknown type qualifier!"); + default: llvm_unreachable("Unknown type qualifier!"); case TQ_const: TQ_constLoc = Loc; break; case TQ_restrict: TQ_restrictLoc = Loc; break; case TQ_volatile: TQ_volatileLoc = Loc; break; @@ -948,7 +948,7 @@ bool VirtSpecifiers::SetSpecifier(Specifier VS, SourceLocation Loc, Specifiers |= VS; switch (VS) { - default: assert(0 && "Unknown specifier!"); + default: llvm_unreachable("Unknown specifier!"); case VS_Override: VS_overrideLoc = Loc; break; case VS_Final: VS_finalLoc = Loc; break; } @@ -958,7 +958,7 @@ bool VirtSpecifiers::SetSpecifier(Specifier VS, SourceLocation Loc, const char *VirtSpecifiers::getSpecifierName(Specifier VS) { switch (VS) { - default: assert(0 && "Unknown specifier"); + default: llvm_unreachable("Unknown specifier"); case VS_Override: return "override"; case VS_Final: return "final"; } diff --git a/lib/Sema/IdentifierResolver.cpp b/lib/Sema/IdentifierResolver.cpp index 95420a316a..a643267085 100644 --- a/lib/Sema/IdentifierResolver.cpp +++ b/lib/Sema/IdentifierResolver.cpp @@ -73,7 +73,7 @@ void IdentifierResolver::IdDeclInfo::RemoveDecl(NamedDecl *D) { } } - assert(0 && "Didn't find this decl on its identifier's chain!"); + llvm_unreachable("Didn't find this decl on its identifier's chain!"); } bool diff --git a/lib/Sema/SemaAttr.cpp b/lib/Sema/SemaAttr.cpp index 1c498925b7..cd03069ec8 100644 --- a/lib/Sema/SemaAttr.cpp +++ b/lib/Sema/SemaAttr.cpp @@ -265,7 +265,7 @@ void Sema::ActOnPragmaPack(PragmaPackKind Kind, IdentifierInfo *Name, break; default: - assert(0 && "Invalid #pragma pack kind."); + llvm_unreachable("Invalid #pragma pack kind."); } } diff --git a/lib/Sema/SemaCXXScopeSpec.cpp b/lib/Sema/SemaCXXScopeSpec.cpp index a2cef9cf93..90fd7cdc40 100644 --- a/lib/Sema/SemaCXXScopeSpec.cpp +++ b/lib/Sema/SemaCXXScopeSpec.cpp @@ -137,7 +137,7 @@ DeclContext *Sema::computeDeclContext(const CXXScopeSpec &SS, switch (NNS->getKind()) { case NestedNameSpecifier::Identifier: - assert(false && "Dependent nested-name-specifier has no DeclContext"); + llvm_unreachable("Dependent nested-name-specifier has no DeclContext"); break; case NestedNameSpecifier::Namespace: diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index cda4d92d2f..052ef3bef2 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -548,7 +548,7 @@ Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) { unsigned BuiltinID = FDecl->getBuiltinID(); unsigned BuiltinIndex, NumFixed = 1; switch (BuiltinID) { - default: assert(0 && "Unknown overloaded atomic builtin!"); + default: llvm_unreachable("Unknown overloaded atomic builtin!"); case Builtin::BI__sync_fetch_and_add: BuiltinIndex = 0; break; case Builtin::BI__sync_fetch_and_sub: BuiltinIndex = 1; break; case Builtin::BI__sync_fetch_and_or: BuiltinIndex = 2; break; diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 5b44841428..166e165d69 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -3400,7 +3400,7 @@ void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) { break; default: - assert(false && "Unknown type specifier kind in CodeCompleteTag"); + llvm_unreachable("Unknown type specifier kind in CodeCompleteTag"); return; } diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 0e817658ae..3878341ca7 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2935,7 +2935,7 @@ Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) { } // switch (Name.getKind()) - assert(false && "Unknown name kind"); + llvm_unreachable("Unknown name kind"); return DeclarationNameInfo(); } @@ -4360,7 +4360,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, DeclarationName Name = NameInfo.getName(); FunctionDecl::StorageClass SC = SC_None; switch (D.getDeclSpec().getStorageClassSpec()) { - default: assert(0 && "Unknown storage class!"); + default: llvm_unreachable("Unknown storage class!"); case DeclSpec::SCS_auto: case DeclSpec::SCS_register: case DeclSpec::SCS_mutable: @@ -8372,7 +8372,7 @@ void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) { } } - assert(0 && "found no user-declared constructors"); + llvm_unreachable("found no user-declared constructors"); return; } break; @@ -8458,7 +8458,7 @@ void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) { case CXXDestructor: hasTrivial = &CXXRecordDecl::hasTrivialDestructor; break; default: - assert(0 && "unexpected special member"); return; + llvm_unreachable("unexpected special member"); return; } // Check for nontrivial bases (and recurse). @@ -8506,7 +8506,7 @@ void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) { } } - assert(0 && "found no explanation for non-trivial member"); + llvm_unreachable("found no explanation for non-trivial member"); } /// TranslateIvarVisibility - Translate visibility from a token ID to an @@ -8514,7 +8514,7 @@ void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) { static ObjCIvarDecl::AccessControl TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) { switch (ivarVisibility) { - default: assert(0 && "Unknown visitibility kind"); + default: llvm_unreachable("Unknown visitibility kind"); case tok::objc_private: return ObjCIvarDecl::Private; case tok::objc_public: return ObjCIvarDecl::Public; case tok::objc_protected: return ObjCIvarDecl::Protected; diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 48f2f9675a..34eb49888d 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -3205,7 +3205,7 @@ static void handleNSReturnsRetainedAttr(Sema &S, Decl *D, switch (Attr.getKind()) { default: - assert(0 && "invalid ownership attribute"); + llvm_unreachable("invalid ownership attribute"); return; case AttributeList::AT_ns_returns_autoreleased: D->addAttr(::new (S.Context) NSReturnsAutoreleasedAttr(Attr.getRange(), diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 616f798594..ef8719c48e 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -9977,7 +9977,7 @@ void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) { } case CXXInvalid: - assert(false && "Invalid special member."); + llvm_unreachable("Invalid special member."); break; } } else { diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 94de7992ba..5a1ce28193 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -1664,7 +1664,7 @@ void Sema::ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl, DiagnoseUnimplementedProperties(S, IMPDecl, CDecl, InsMap); } } else - assert(false && "invalid ObjCContainerDecl type."); + llvm_unreachable("invalid ObjCContainerDecl type."); } /// ActOnForwardClassDeclaration - diff --git a/lib/Sema/SemaExceptionSpec.cpp b/lib/Sema/SemaExceptionSpec.cpp index 65bed3a205..aba7b34977 100644 --- a/lib/Sema/SemaExceptionSpec.cpp +++ b/lib/Sema/SemaExceptionSpec.cpp @@ -223,7 +223,7 @@ bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) { break; default: - assert(false && "This spec type is compatible with none."); + llvm_unreachable("This spec type is compatible with none."); } OS.flush(); diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 7106ab2d16..582f153299 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -2390,7 +2390,7 @@ ExprResult Sema::ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind) { PredefinedExpr::IdentType IT; switch (Kind) { - default: assert(0 && "Unknown simple primary expr!"); + default: llvm_unreachable("Unknown simple primary expr!"); case tok::kw___func__: IT = PredefinedExpr::Func; break; // [C99 6.4.2.2] case tok::kw___FUNCTION__: IT = PredefinedExpr::Function; break; case tok::kw___PRETTY_FUNCTION__: IT = PredefinedExpr::PrettyFunction; break; @@ -2952,7 +2952,7 @@ Sema::ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc, tok::TokenKind Kind, Expr *Input) { UnaryOperatorKind Opc; switch (Kind) { - default: assert(0 && "Unknown unary op!"); + default: llvm_unreachable("Unknown unary op!"); case tok::plusplus: Opc = UO_PostInc; break; case tok::minusminus: Opc = UO_PostDec; break; } @@ -6511,7 +6511,7 @@ QualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, case BO_GE: resultComparison = ") >= 0"; break; case BO_EQ: resultComparison = ") == 0"; break; case BO_NE: resultComparison = ") != 0"; break; - default: assert(false && "Invalid comparison operator"); + default: llvm_unreachable("Invalid comparison operator"); } DiagRuntimeBehavior(Loc, 0, @@ -7593,7 +7593,7 @@ static QualType CheckAddressOfOperand(Sema &S, Expr *OrigOp, } } } else if (!isa(dcl) && !isa(dcl)) - assert(0 && "Unknown/unexpected decl type"); + llvm_unreachable("Unknown/unexpected decl type"); } if (AddressOfError != AO_No_Error) { @@ -7669,7 +7669,7 @@ static inline BinaryOperatorKind ConvertTokenKindToBinaryOpcode( tok::TokenKind Kind) { BinaryOperatorKind Opc; switch (Kind) { - default: assert(0 && "Unknown binop!"); + default: llvm_unreachable("Unknown binop!"); case tok::periodstar: Opc = BO_PtrMemD; break; case tok::arrowstar: Opc = BO_PtrMemI; break; case tok::star: Opc = BO_Mul; break; @@ -7710,7 +7710,7 @@ static inline UnaryOperatorKind ConvertTokenKindToUnaryOpcode( tok::TokenKind Kind) { UnaryOperatorKind Opc; switch (Kind) { - default: assert(0 && "Unknown unary op!"); + default: llvm_unreachable("Unknown unary op!"); case tok::plusplus: Opc = UO_PreInc; break; case tok::minusminus: Opc = UO_PreDec; break; case tok::amp: Opc = UO_AddrOf; break; @@ -8941,7 +8941,7 @@ ExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) { else if (pw == Context.getTargetInfo().getLongLongWidth()) Ty = Context.LongLongTy; else { - assert(0 && "I don't know size of pointer!"); + llvm_unreachable("I don't know size of pointer!"); Ty = Context.IntTy; } @@ -8990,7 +8990,7 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, bool MayHaveConvFixit = false; switch (ConvTy) { - default: assert(0 && "Unknown conversion type"); + default: llvm_unreachable("Unknown conversion type"); case Compatible: return false; case PointerToInt: DiagKind = diag::ext_typecheck_convert_pointer_int; diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 140fd9003d..3beb51c865 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -1525,7 +1525,7 @@ bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, return true; } } - assert(false && "Unreachable, bad result from BestViableFunction"); + llvm_unreachable("Unreachable, bad result from BestViableFunction"); return true; } @@ -2068,7 +2068,7 @@ static ExprResult BuildCXXCastArgument(Sema &S, DeclAccessPair FoundDecl, Expr *From) { switch (Kind) { - default: assert(0 && "Unhandled cast kind!"); + default: llvm_unreachable("Unhandled cast kind!"); case CK_ConstructorConversion: { ASTOwningVector ConstructorArgs(S); @@ -2181,7 +2181,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, return ExprError(); case ImplicitConversionSequence::EllipsisConversion: - assert(false && "Cannot perform an ellipsis conversion"); + llvm_unreachable("Cannot perform an ellipsis conversion"); return Owned(From); case ImplicitConversionSequence::BadConversion: @@ -2284,7 +2284,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, break; default: - assert(false && "Improper first standard conversion"); + llvm_unreachable("Improper first standard conversion"); break; } @@ -2524,7 +2524,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, case ICK_Function_To_Pointer: case ICK_Qualification: case ICK_Num_Conversion_Kinds: - assert(false && "Improper second standard conversion"); + llvm_unreachable("Improper second standard conversion"); break; } @@ -2550,7 +2550,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, } default: - assert(false && "Improper third standard conversion"); + llvm_unreachable("Improper third standard conversion"); break; } @@ -3560,7 +3560,7 @@ static bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS break; case OR_Deleted: - assert(false && "Conditional operator has only built-in overloads"); + llvm_unreachable("Conditional operator has only built-in overloads"); break; } return true; diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 43477b266d..f710380720 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -512,7 +512,7 @@ void InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, else if (T->isVectorType()) maxElements = T->getAs()->getNumElements(); else - assert(0 && "CheckImplicitInitList(): Illegal type"); + llvm_unreachable("CheckImplicitInitList(): Illegal type"); if (maxElements == 0) { SemaRef.Diag(ParentIList->getInit(Index)->getLocStart(), @@ -656,7 +656,7 @@ void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, SubobjectIsDesignatorContext, Index, StructuredList, StructuredIndex); } else - assert(0 && "Aggregate that isn't a structure or array?!"); + llvm_unreachable("Aggregate that isn't a structure or array?!"); } else if (DeclType->isVoidType() || DeclType->isFunctionType()) { // This type is invalid, issue a diagnostic. ++Index; diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 806fd39fee..7f42fb7178 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -4657,7 +4657,7 @@ Sema::AddConversionCandidate(CXXConversionDecl *Conversion, break; default: - assert(false && + llvm_unreachable( "Can only end up with a standard conversion sequence or failure"); } } @@ -5039,7 +5039,7 @@ BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty, buildObjCPtr = true; } else - assert(false && "type was not a pointer type!"); + llvm_unreachable("type was not a pointer type!"); } else PointeeTy = PointerTy->getPointeeType(); @@ -6333,7 +6333,7 @@ Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, switch (Op) { case OO_None: case NUM_OVERLOADED_OPERATORS: - assert(false && "Expected an overloaded operator"); + llvm_unreachable("Expected an overloaded operator"); break; case OO_New: @@ -6341,7 +6341,8 @@ Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op, case OO_Array_New: case OO_Array_Delete: case OO_Call: - assert(false && "Special operators don't use AddBuiltinOperatorCandidates"); + llvm_unreachable( + "Special operators don't use AddBuiltinOperatorCandidates"); break; case OO_Comma: @@ -7310,7 +7311,7 @@ static unsigned RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) { switch ((Sema::TemplateDeductionResult)DFI.Result) { case Sema::TDK_Success: - assert(0 && "TDK_success while diagnosing bad deduction"); + llvm_unreachable("TDK_success while diagnosing bad deduction"); case Sema::TDK_Incomplete: return 1; @@ -8368,7 +8369,7 @@ Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, if (ULE->decls_begin() + 1 == ULE->decls_end() && (F = dyn_cast(*ULE->decls_begin())) && F->getBuiltinID() && F->isImplicit()) - assert(0 && "performing ADL for builtin"); + llvm_unreachable("performing ADL for builtin"); // We don't perform ADL in C. assert(getLangOptions().CPlusPlus && "ADL enabled in C"); diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index 274c74c7b6..c75e337fdb 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -1387,7 +1387,7 @@ Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation ColonLoc, else { // Can't be a DependentSizedArrayType or an IncompleteArrayType since // UnqAT is not incomplete and Range is not type-dependent. - assert(0 && "Unexpected array type in for-range"); + llvm_unreachable("Unexpected array type in for-range"); return StmtError(); } diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 43fdcb6d4a..4f90a72ea2 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -2323,7 +2323,8 @@ TemplateNameKind Sema::ActOnDependentTemplateName(Scope *S, return TNK_Dependent_template_name; case UnqualifiedId::IK_LiteralOperatorId: - assert(false && "We don't support these; Parse shouldn't have allowed propagation"); + llvm_unreachable( + "We don't support these; Parse shouldn't have allowed propagation"); default: break; @@ -2681,7 +2682,7 @@ bool Sema::CheckTemplateArgument(NamedDecl *Param, switch (Arg.getArgument().getKind()) { case TemplateArgument::Null: - assert(false && "Should never see a NULL template argument here"); + llvm_unreachable("Should never see a NULL template argument here"); return true; case TemplateArgument::Expression: { @@ -2804,7 +2805,7 @@ bool Sema::CheckTemplateArgument(NamedDecl *Param, switch (Arg.getArgument().getKind()) { case TemplateArgument::Null: - assert(false && "Should never see a NULL template argument here"); + llvm_unreachable("Should never see a NULL template argument here"); return true; case TemplateArgument::Template: @@ -5216,7 +5217,7 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, switch (NewTSK) { case TSK_Undeclared: case TSK_ImplicitInstantiation: - assert(false && "Don't check implicit instantiations here"); + llvm_unreachable("Don't check implicit instantiations here"); return false; case TSK_ExplicitSpecialization: @@ -5349,7 +5350,7 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, break; } - assert(false && "Missing specialization/instantiation case?"); + llvm_unreachable("Missing specialization/instantiation case?"); return false; } diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp index add8e10831..283cc575ad 100644 --- a/lib/Sema/SemaTemplateDeduction.cpp +++ b/lib/Sema/SemaTemplateDeduction.cpp @@ -1539,7 +1539,7 @@ DeduceTemplateArguments(Sema &S, switch (Param.getKind()) { case TemplateArgument::Null: - assert(false && "Null template argument in parameter list"); + llvm_unreachable("Null template argument in parameter list"); break; case TemplateArgument::Type: @@ -1830,7 +1830,7 @@ static bool isSameTemplateArg(ASTContext &Context, switch (X.getKind()) { case TemplateArgument::Null: - assert(false && "Comparing NULL template argument"); + llvm_unreachable("Comparing NULL template argument"); break; case TemplateArgument::Type: diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index ffd7955fdf..d4406240d0 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -96,7 +96,7 @@ void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs, Decl * TemplateDeclInstantiator::VisitTranslationUnitDecl(TranslationUnitDecl *D) { - assert(false && "Translation units cannot be instantiated"); + llvm_unreachable("Translation units cannot be instantiated"); return D; } @@ -110,7 +110,7 @@ TemplateDeclInstantiator::VisitLabelDecl(LabelDecl *D) { Decl * TemplateDeclInstantiator::VisitNamespaceDecl(NamespaceDecl *D) { - assert(false && "Namespaces cannot be instantiated"); + llvm_unreachable("Namespaces cannot be instantiated"); return D; } @@ -701,7 +701,7 @@ Decl *TemplateDeclInstantiator::VisitEnumDecl(EnumDecl *D) { } Decl *TemplateDeclInstantiator::VisitEnumConstantDecl(EnumConstantDecl *D) { - assert(false && "EnumConstantDecls can only occur within EnumDecls."); + llvm_unreachable("EnumConstantDecls can only occur within EnumDecls."); return 0; } @@ -3308,7 +3308,7 @@ void Sema::PerformPendingInstantiations(bool LocalOnly) { // and removed the need for implicit instantiation. switch (Var->getMostRecentDeclaration()->getTemplateSpecializationKind()) { case TSK_Undeclared: - assert(false && "Cannot instantitiate an undeclared specialization."); + llvm_unreachable("Cannot instantitiate an undeclared specialization."); case TSK_ExplicitInstantiationDeclaration: case TSK_ExplicitSpecialization: continue; // No longer need to instantiate this type. diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 6b98ed8721..2b4a509f11 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -1750,7 +1750,7 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, switch (D.getContext()) { case Declarator::KNRTypeListContext: - assert(0 && "K&R type lists aren't allowed in C++"); + llvm_unreachable("K&R type lists aren't allowed in C++"); break; case Declarator::ObjCPrototypeContext: case Declarator::PrototypeContext: @@ -1760,7 +1760,7 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static) break; switch (cast(SemaRef.CurContext)->getTagKind()) { - case TTK_Enum: assert(0 && "unhandled tag kind"); break; + case TTK_Enum: llvm_unreachable("unhandled tag kind"); break; case TTK_Struct: Error = 1; /* Struct member */ break; case TTK_Union: Error = 2; /* Union member */ break; case TTK_Class: Error = 3; /* Class member */ break; @@ -1921,7 +1921,7 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, state.setCurrentChunkIndex(chunkIndex); DeclaratorChunk &DeclType = D.getTypeObject(chunkIndex); switch (DeclType.Kind) { - default: assert(0 && "Unknown decltype!"); + default: llvm_unreachable("Unknown decltype!"); case DeclaratorChunk::Paren: T = S.BuildParenType(T); break; @@ -3035,7 +3035,7 @@ ParsedType Sema::CreateParsedType(QualType T, TypeSourceInfo *TInfo) { void LocInfoType::getAsStringInternal(std::string &Str, const PrintingPolicy &Policy) const { - assert(false && "LocInfoType leaked into the type system; an opaque TypeTy*" + llvm_unreachable("LocInfoType leaked into the type system; an opaque TypeTy*" " was used directly instead of getting the QualType through" " GetTypeFromParser"); } diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 27376816ec..0c22c61b66 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -1728,7 +1728,7 @@ public: SubExpr, RParenLoc); default: - assert(false && "Invalid C++ named cast"); + llvm_unreachable("Invalid C++ named cast"); break; } @@ -2681,7 +2681,7 @@ TreeTransform } } - assert(0 && "Unknown name kind."); + llvm_unreachable("Unknown name kind."); return DeclarationNameInfo(); } @@ -8049,7 +8049,7 @@ TreeTransform::TransformBlockDeclRefExpr(BlockDeclRefExpr *E) { template ExprResult TreeTransform::TransformAsTypeExpr(AsTypeExpr *E) { - assert(false && "Cannot transform asType expressions yet"); + llvm_unreachable("Cannot transform asType expressions yet"); return SemaRef.Owned(E); } diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index f83f709ebe..4d92e314bc 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -4993,7 +4993,7 @@ ASTReader::ReadTemplateName(Module &F, const RecordData &Record, } } - assert(0 && "Unhandled template name kind!"); + llvm_unreachable("Unhandled template name kind!"); return TemplateName(); } @@ -5033,7 +5033,7 @@ ASTReader::ReadTemplateArgument(Module &F, } } - assert(0 && "Unhandled template argument kind!"); + llvm_unreachable("Unhandled template argument kind!"); return TemplateArgument(); } diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index 01b635ef97..38f5f49734 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/lib/Serialization/ASTReaderDecl.cpp @@ -345,7 +345,7 @@ void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) { ReadDeclarationNameLoc(FD->DNLoc, FD->getDeclName(), Record, Idx); FD->IdentifierNamespace = Record[Idx++]; switch ((FunctionDecl::TemplatedKind)Record[Idx++]) { - default: assert(false && "Unhandled TemplatedKind!"); + default: llvm_unreachable("Unhandled TemplatedKind!"); break; case FunctionDecl::TK_NonTemplate: break; @@ -955,7 +955,7 @@ void ASTDeclReader::VisitCXXRecordDecl(CXXRecordDecl *D) { }; switch ((CXXRecKind)Record[Idx++]) { default: - assert(false && "Out of sync with ASTDeclWriter::VisitCXXRecordDecl?"); + llvm_unreachable("Out of sync with ASTDeclWriter::VisitCXXRecordDecl?"); case CXXRecNotTemplate: break; case CXXRecTemplate: @@ -1306,8 +1306,8 @@ void ASTDeclReader::VisitRedeclarable(Redeclarable *D) { RedeclKind Kind = (RedeclKind)Record[Idx++]; switch (Kind) { default: - assert(0 && "Out of sync with ASTDeclWriter::VisitRedeclarable or messed up" - " reading"); + llvm_unreachable("Out of sync with ASTDeclWriter::VisitRedeclarable or" + " messed up reading"); case NoRedeclaration: break; case PointsToPrevious: { @@ -1480,7 +1480,7 @@ Decl *ASTReader::ReadDeclRecord(DeclID ID) { switch ((DeclCode)DeclsCursor.ReadRecord(Code, Record)) { case DECL_CONTEXT_LEXICAL: case DECL_CONTEXT_VISIBLE: - assert(false && "Record cannot be de-serialized with ReadDeclRecord"); + llvm_unreachable("Record cannot be de-serialized with ReadDeclRecord"); break; case DECL_TYPEDEF: D = TypedefDecl::Create(Context, 0, SourceLocation(), SourceLocation(), diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 3286a17779..494f4aa354 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -91,7 +91,7 @@ namespace { } void ASTTypeWriter::VisitBuiltinType(const BuiltinType *T) { - assert(false && "Built-in types are never serialized"); + llvm_unreachable("Built-in types are never serialized"); } void ASTTypeWriter::VisitComplexType(const ComplexType *T) { @@ -305,7 +305,7 @@ void ASTTypeWriter::VisitDependentSizedExtVectorType( const DependentSizedExtVectorType *T) { // FIXME: Serialize this type (C++ only) - assert(false && "Cannot serialize dependent sized extended vector types"); + llvm_unreachable("Cannot serialize dependent sized extended vector types"); } void diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp index a7468a77a3..5a5963c5ec 100644 --- a/lib/Serialization/ASTWriterDecl.cpp +++ b/lib/Serialization/ASTWriterDecl.cpp @@ -295,7 +295,7 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) { Record.push_back(D->getIdentifierNamespace()); Record.push_back(D->getTemplatedKind()); switch (D->getTemplatedKind()) { - default: assert(false && "Unhandled TemplatedKind!"); + default: llvm_unreachable("Unhandled TemplatedKind!"); break; case FunctionDecl::TK_NonTemplate: break; diff --git a/lib/Serialization/ASTWriterStmt.cpp b/lib/Serialization/ASTWriterStmt.cpp index 5f1e4de740..a8c02a557f 100644 --- a/lib/Serialization/ASTWriterStmt.cpp +++ b/lib/Serialization/ASTWriterStmt.cpp @@ -1440,7 +1440,7 @@ void ASTWriter::WriteSubStmt(Stmt *S) { SourceManager &SrcMgr = DeclIDs.begin()->first->getASTContext().getSourceManager(); S->dump(SrcMgr); - assert(0 && "Unhandled sub statement writing AST file"); + llvm_unreachable("Unhandled sub statement writing AST file"); } #endif diff --git a/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp b/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp index c63603ae69..66943fddef 100644 --- a/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp @@ -82,7 +82,7 @@ SourceRange StackAddrEscapeChecker::GenName(raw_ostream &os, range = TOR->getExpr()->getSourceRange(); } else { - assert(false && "Invalid region in ReturnStackAddressChecker."); + llvm_unreachable("Invalid region in ReturnStackAddressChecker."); } return range; diff --git a/lib/StaticAnalyzer/Core/AggExprVisitor.cpp b/lib/StaticAnalyzer/Core/AggExprVisitor.cpp index 901190d901..0936d61784 100644 --- a/lib/StaticAnalyzer/Core/AggExprVisitor.cpp +++ b/lib/StaticAnalyzer/Core/AggExprVisitor.cpp @@ -46,7 +46,7 @@ public: void AggExprVisitor::VisitCastExpr(CastExpr *E) { switch (E->getCastKind()) { default: - assert(0 && "Unhandled cast kind"); + llvm_unreachable("Unhandled cast kind"); case CK_NoOp: case CK_ConstructorConversion: case CK_UserDefinedConversion: diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 3936d561c5..b87c9eba18 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -1742,7 +1742,7 @@ FindReportInEquivalenceClass(BugReportEquivClass& EQ, if (!errorNode) continue; if (errorNode->isSink()) { - assert(false && + llvm_unreachable( "BugType::isSuppressSink() should not be 'true' for sink end nodes"); return 0; } diff --git a/lib/StaticAnalyzer/Core/CoreEngine.cpp b/lib/StaticAnalyzer/Core/CoreEngine.cpp index 06c3af1c0a..6a860428d6 100644 --- a/lib/StaticAnalyzer/Core/CoreEngine.cpp +++ b/lib/StaticAnalyzer/Core/CoreEngine.cpp @@ -326,7 +326,7 @@ void CoreEngine::HandleBlockExit(const CFGBlock * B, ExplodedNode *Pred) { if (const Stmt *Term = B->getTerminator()) { switch (Term->getStmtClass()) { default: - assert(false && "Analysis for this terminator not implemented."); + llvm_unreachable("Analysis for this terminator not implemented."); break; case Stmt::BinaryOperatorClass: // '&&' and '||' @@ -547,7 +547,7 @@ static ProgramPoint GetProgramPoint(const Stmt *S, ProgramPoint::Kind K, const ProgramPointTag *tag){ switch (K) { default: - assert(false && "Unhandled ProgramPoint kind"); + llvm_unreachable("Unhandled ProgramPoint kind"); case ProgramPoint::PreStmtKind: return PreStmt(S, LC, tag); case ProgramPoint::PostStmtKind: diff --git a/lib/StaticAnalyzer/Core/ExprEngine.cpp b/lib/StaticAnalyzer/Core/ExprEngine.cpp index 37362d37cb..5e38f2f244 100644 --- a/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -1030,7 +1030,7 @@ void ExprEngine::processIndirectGoto(IndirectGotoNodeBuilder &builder) { } } - assert(false && "No block with label."); + llvm_unreachable("No block with label."); return; } diff --git a/lib/StaticAnalyzer/Core/ExprEngineC.cpp b/lib/StaticAnalyzer/Core/ExprEngineC.cpp index 0daa252ecc..955684f92d 100644 --- a/lib/StaticAnalyzer/Core/ExprEngineC.cpp +++ b/lib/StaticAnalyzer/Core/ExprEngineC.cpp @@ -74,7 +74,7 @@ void ExprEngine::VisitBinaryOperator(const BinaryOperator* B, switch (Op) { default: - assert(0 && "Invalid opcode for compound assignment."); + llvm_unreachable("Invalid opcode for compound assignment."); case BO_MulAssign: Op = BO_Mul; break; case BO_DivAssign: Op = BO_Div; break; case BO_RemAssign: Op = BO_Rem; break; @@ -203,9 +203,9 @@ void ExprEngine::VisitCast(const CastExpr *CastE, const Expr *Ex, switch (CastE->getCastKind()) { case CK_LValueToRValue: - assert(false && "LValueToRValue casts handled earlier."); + llvm_unreachable("LValueToRValue casts handled earlier."); case CK_GetObjCProperty: - assert(false && "GetObjCProperty casts handled earlier."); + llvm_unreachable("GetObjCProperty casts handled earlier."); case CK_ToVoid: Dst.Add(Pred); continue; @@ -625,7 +625,7 @@ void ExprEngine::VisitUnaryOperator(const UnaryOperator* U, switch (U->getOpcode()) { default: - assert(false && "Invalid Opcode."); + llvm_unreachable("Invalid Opcode."); break; case UO_Not: diff --git a/lib/StaticAnalyzer/Core/RegionStore.cpp b/lib/StaticAnalyzer/Core/RegionStore.cpp index 04c274d319..18fbf831ec 100644 --- a/lib/StaticAnalyzer/Core/RegionStore.cpp +++ b/lib/StaticAnalyzer/Core/RegionStore.cpp @@ -891,7 +891,7 @@ SVal RegionStoreManager::Retrieve(Store store, Loc L, QualType T) { } if (isa(MR)) { - assert(0 && "Why load from a code text region?"); + llvm_unreachable("Why load from a code text region?"); return UnknownVal(); } @@ -1130,7 +1130,7 @@ RegionStoreManager::RetrieveDerivedDefaultValue(RegionBindings B, if (isa(val)) return Optional(); - assert(0 && "Unknown default value"); + llvm_unreachable("Unknown default value"); } return Optional(); diff --git a/lib/StaticAnalyzer/Core/SVals.cpp b/lib/StaticAnalyzer/Core/SVals.cpp index 8eb65baa89..e32a3b0f53 100644 --- a/lib/StaticAnalyzer/Core/SVals.cpp +++ b/lib/StaticAnalyzer/Core/SVals.cpp @@ -171,7 +171,7 @@ void SVal::symbol_iterator::expand() { return; } - assert(false && "unhandled expansion case"); + llvm_unreachable("unhandled expansion case"); } const void *nonloc::LazyCompoundVal::getStore() const { @@ -369,7 +369,7 @@ void Loc::dumpToStream(raw_ostream &os) const { break; } default: - assert(false && "Pretty-printing not implemented for this Loc."); + llvm_unreachable("Pretty-printing not implemented for this Loc."); break; } } diff --git a/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp b/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp index 73b4d78eba..79d8b8bf9d 100644 --- a/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp +++ b/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp @@ -125,7 +125,7 @@ static BinaryOperator::Opcode NegateComparison(BinaryOperator::Opcode op) { // the only place it's used. (This code was copied from SimpleSValBuilder.cpp.) switch (op) { default: - assert(false && "Invalid opcode."); + llvm_unreachable("Invalid opcode."); case BO_LT: return BO_GE; case BO_GT: return BO_LE; case BO_LE: return BO_GT; @@ -152,7 +152,7 @@ const ProgramState *SimpleConstraintManager::assumeAux(const ProgramState *state switch (Cond.getSubKind()) { default: - assert(false && "'Assume' not implemented for this NonLoc"); + llvm_unreachable("'Assume' not implemented for this NonLoc"); case nonloc::SymbolValKind: { nonloc::SymbolVal& SV = cast(Cond); diff --git a/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp b/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp index 787aa055e6..830d70e888 100644 --- a/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp +++ b/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp @@ -171,7 +171,7 @@ SVal SimpleSValBuilder::evalComplement(NonLoc X) { static BinaryOperator::Opcode NegateComparison(BinaryOperator::Opcode op) { switch (op) { default: - assert(false && "Invalid opcode."); + llvm_unreachable("Invalid opcode."); case BO_LT: return BO_GE; case BO_GT: return BO_LE; case BO_LE: return BO_GT; @@ -184,7 +184,7 @@ static BinaryOperator::Opcode NegateComparison(BinaryOperator::Opcode op) { static BinaryOperator::Opcode ReverseComparison(BinaryOperator::Opcode op) { switch (op) { default: - assert(false && "Invalid opcode."); + llvm_unreachable("Invalid opcode."); case BO_LT: return BO_GT; case BO_GT: return BO_LT; case BO_LE: return BO_GE; @@ -347,7 +347,7 @@ SVal SimpleSValBuilder::evalBinOpNN(const ProgramState *state, break; case BO_LAnd: case BO_LOr: - assert(false && "Logical operators handled by branching logic."); + llvm_unreachable("Logical operators handled by branching logic."); return UnknownVal(); case BO_Assign: case BO_MulAssign: @@ -361,11 +361,11 @@ SVal SimpleSValBuilder::evalBinOpNN(const ProgramState *state, case BO_XorAssign: case BO_OrAssign: case BO_Comma: - assert(false && "'=' and ',' operators handled by ExprEngine."); + llvm_unreachable("'=' and ',' operators handled by ExprEngine."); return UnknownVal(); case BO_PtrMemD: case BO_PtrMemI: - assert(false && "Pointer arithmetic not handled here."); + llvm_unreachable("Pointer arithmetic not handled here."); return UnknownVal(); case BO_LT: case BO_GT: @@ -556,7 +556,7 @@ SVal SimpleSValBuilder::evalBinOpLL(const ProgramState *state, if (lhs == rhs) { switch (op) { default: - assert(false && "Unimplemented operation for two identical values"); + llvm_unreachable("Unimplemented operation for two identical values"); return UnknownVal(); case BO_Sub: return makeZeroVal(resultTy); @@ -573,7 +573,7 @@ SVal SimpleSValBuilder::evalBinOpLL(const ProgramState *state, switch (lhs.getSubKind()) { default: - assert(false && "Ordering not implemented for this Loc."); + llvm_unreachable("Ordering not implemented for this Loc."); return UnknownVal(); case loc::GotoLabelKind: @@ -827,7 +827,7 @@ SVal SimpleSValBuilder::evalBinOpLL(const ProgramState *state, return makeTruthVal(!leftFirst, resultTy); } - assert(false && "Fields not found in parent record's definition"); + llvm_unreachable("Fields not found in parent record's definition"); } // If we get here, we have no way of comparing the regions. diff --git a/lib/StaticAnalyzer/Core/Store.cpp b/lib/StaticAnalyzer/Core/Store.cpp index 127d583b22..63550d47f1 100644 --- a/lib/StaticAnalyzer/Core/Store.cpp +++ b/lib/StaticAnalyzer/Core/Store.cpp @@ -103,7 +103,7 @@ const MemRegion *StoreManager::castRegion(const MemRegion *R, QualType CastToTy) case MemRegion::UnknownSpaceRegionKind: case MemRegion::NonStaticGlobalSpaceRegionKind: case MemRegion::StaticGlobalSpaceRegionKind: { - assert(0 && "Invalid region cast"); + llvm_unreachable("Invalid region cast"); break; } @@ -203,7 +203,7 @@ const MemRegion *StoreManager::castRegion(const MemRegion *R, QualType CastToTy) } } - assert(0 && "unreachable"); + llvm_unreachable("unreachable"); return 0; } @@ -261,7 +261,7 @@ SVal StoreManager::getLValueFieldOrIvar(const Decl *D, SVal Base) { return Base; default: - assert(0 && "Unhandled Base."); + llvm_unreachable("Unhandled Base."); return Base; } diff --git a/lib/StaticAnalyzer/Core/SymbolManager.cpp b/lib/StaticAnalyzer/Core/SymbolManager.cpp index 255b914985..32ad5819de 100644 --- a/lib/StaticAnalyzer/Core/SymbolManager.cpp +++ b/lib/StaticAnalyzer/Core/SymbolManager.cpp @@ -28,7 +28,7 @@ void SymExpr::dump() const { static void print(raw_ostream &os, BinaryOperator::Opcode Op) { switch (Op) { default: - assert(false && "operator printing not implemented"); + llvm_unreachable("operator printing not implemented"); break; case BO_Mul: os << '*' ; break; case BO_Div: os << '/' ; break; diff --git a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 76ca477794..c4619e369d 100644 --- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -102,7 +102,7 @@ public: // Create the analyzer component creators. switch (Opts.AnalysisStoreOpt) { default: - assert(0 && "Unknown store manager."); + llvm_unreachable("Unknown store manager."); #define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATEFN) \ case NAME##Model: CreateStoreMgr = CREATEFN; break; #include "clang/Frontend/Analyses.def" @@ -110,7 +110,7 @@ public: switch (Opts.AnalysisConstraintsOpt) { default: - assert(0 && "Unknown store manager."); + llvm_unreachable("Unknown store manager."); #define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATEFN) \ case NAME##Model: CreateConstraintMgr = CREATEFN; break; #include "clang/Frontend/Analyses.def" diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index a5332b9464..aa4b12b18a 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -4730,7 +4730,7 @@ AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) { SourceLocation TokLoc = GetTokenLoc(I); switch (LocationCompare(SrcMgr, TokLoc, cursorRange)) { case RangeBefore: - assert(0 && "Infeasible"); + llvm_unreachable("Infeasible"); case RangeAfter: break; case RangeOverlap: diff --git a/tools/libclang/CIndexDiagnostic.cpp b/tools/libclang/CIndexDiagnostic.cpp index d9b515b146..cfebbfce52 100644 --- a/tools/libclang/CIndexDiagnostic.cpp +++ b/tools/libclang/CIndexDiagnostic.cpp @@ -106,7 +106,7 @@ CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) { /* Print warning/error/etc. */ switch (Severity) { - case CXDiagnostic_Ignored: assert(0 && "impossible"); break; + case CXDiagnostic_Ignored: llvm_unreachable("impossible"); break; case CXDiagnostic_Note: Out << "note: "; break; case CXDiagnostic_Warning: Out << "warning: "; break; case CXDiagnostic_Error: Out << "error: "; break; diff --git a/tools/libclang/CIndexUSRs.cpp b/tools/libclang/CIndexUSRs.cpp index 464dbb0ac7..f32063cfe3 100644 --- a/tools/libclang/CIndexUSRs.cpp +++ b/tools/libclang/CIndexUSRs.cpp @@ -320,7 +320,7 @@ void USRGenerator::VisitObjCForwardProtocolDecl(ObjCForwardProtocolDecl *D) { void USRGenerator::VisitObjCContainerDecl(ObjCContainerDecl *D) { switch (D->getKind()) { default: - assert(false && "Invalid ObjC container."); + llvm_unreachable("Invalid ObjC container."); case Decl::ObjCInterface: case Decl::ObjCImplementation: GenObjCClass(D->getName()); diff --git a/tools/libclang/CIndexer.cpp b/tools/libclang/CIndexer.cpp index 56974b9e99..995a8febb0 100644 --- a/tools/libclang/CIndexer.cpp +++ b/tools/libclang/CIndexer.cpp @@ -74,7 +74,7 @@ std::string CIndexer::getClangResourcesPath() { // This silly cast below avoids a C++ warning. Dl_info info; if (dladdr((void *)(uintptr_t)clang_createTranslationUnit, &info) == 0) - assert(0 && "Call to dladdr() failed"); + llvm_unreachable("Call to dladdr() failed"); llvm::sys::Path LibClangPath(info.dli_fname); -- cgit v1.2.1