Assert that a valid operator new/delete signature is always found by the coroutine...
authorEric Fiselier <eric@efcs.ca>
Tue, 18 Apr 2017 05:30:39 +0000 (05:30 +0000)
committerEric Fiselier <eric@efcs.ca>
Tue, 18 Apr 2017 05:30:39 +0000 (05:30 +0000)
llvm-svn: 300529

clang/lib/Sema/SemaCoroutine.cpp

index 6d8f4fac01d813f2245917288e0cf777b4912310..c709a1a723d0280a2e6d0fbba4e48d51f3931c68 100644 (file)
@@ -912,7 +912,9 @@ bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {
                               OperatorNew, UnusedResult);
   }
 
-  if (OperatorNew && RequiresNoThrowAlloc) {
+  assert(OperatorNew && "expected definition of operator new to be found");
+
+  if (RequiresNoThrowAlloc) {
     const auto *FT = OperatorNew->getType()->getAs<FunctionProtoType>();
     if (!FT->isNothrow(S.Context, /*ResultIfDependent*/ false)) {
       S.Diag(OperatorNew->getLocation(),
@@ -924,9 +926,6 @@ bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {
     }
   }
 
-  // FIXME: Diagnose and handle the case where no matching operator new is found
-  //  (ie OperatorNew == nullptr)
-
   if ((OperatorDelete = findDeleteForPromise(S, Loc, PromiseType)) == nullptr)
     return false;