Avoid implicit conversions of Optional<T> to bool.
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 21 Feb 2013 06:05:05 +0000 (06:05 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 21 Feb 2013 06:05:05 +0000 (06:05 +0000)
This is a precursor to making Optional<T>'s operator bool 'explicit' when
building Clang & LLVM as C++11.

llvm-svn: 175722

clang/include/clang/AST/Type.h
clang/lib/Sema/SemaExpr.cpp
clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp

index 2026b22..c6f8baa 100644 (file)
@@ -4168,7 +4168,7 @@ public:
   static void Profile(llvm::FoldingSetNodeID &ID, QualType Pattern,
                       Optional<unsigned> NumExpansions) {
     ID.AddPointer(Pattern.getAsOpaquePtr());
-    ID.AddBoolean(NumExpansions);
+    ID.AddBoolean(NumExpansions.hasValue());
     if (NumExpansions)
       ID.AddInteger(*NumExpansions);
   }
index 4ddbdd2..ec16efd 100644 (file)
@@ -7159,7 +7159,7 @@ QualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS,
         if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType())
             && !LHSIsNull && !RHSIsNull) {
           diagnoseFunctionPointerToVoidComparison(
-              *this, Loc, LHS, RHS, /*isError*/ isSFINAEContext());
+              *this, Loc, LHS, RHS, /*isError*/ (bool)isSFINAEContext());
           
           if (isSFINAEContext())
             return QualType();
@@ -8096,8 +8096,8 @@ static QualType CheckAddressOfOperand(Sema &S, ExprResult &OrigOp,
   unsigned AddressOfError = AO_No_Error;
 
   if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) { 
-    bool sfinae = S.isSFINAEContext();
-    S.Diag(OpLoc, sfinae ? diag::err_typecheck_addrof_temporary
+    bool sfinae = (bool)S.isSFINAEContext();
+    S.Diag(OpLoc, S.isSFINAEContext() ? diag::err_typecheck_addrof_temporary
                          : diag::ext_typecheck_addrof_temporary)
       << op->getType() << op->getSourceRange();
     if (sfinae)
index 85b9305..26dbb7f 100644 (file)
@@ -84,7 +84,7 @@ static FoundationClass findKnownClass(const ObjCInterfaceDecl *ID) {
 }
 
 static inline bool isNil(SVal X) {
-  return X.getAs<loc::ConcreteInt>();
+  return X.getAs<loc::ConcreteInt>().hasValue();
 }
 
 //===----------------------------------------------------------------------===//