From 137b50f0c3b1803d3a743cc2b863fe1acb6f62e1 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 14 Aug 2019 03:53:31 +0000 Subject: Guard dumps in the coro intrinsic validation logic behind NDEBUG checks. dump() is not guaranteed to be defined in all builds. llvm-svn: 368790 --- llvm/lib/Transforms/Coroutines/Coroutines.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'llvm/lib/Transforms/Coroutines') diff --git a/llvm/lib/Transforms/Coroutines/Coroutines.cpp b/llvm/lib/Transforms/Coroutines/Coroutines.cpp index 6239674cc69..af27e54eed1 100644 --- a/llvm/lib/Transforms/Coroutines/Coroutines.cpp +++ b/llvm/lib/Transforms/Coroutines/Coroutines.cpp @@ -360,7 +360,9 @@ void coro::Shape::buildFrom(Function &F) { for (auto AnySuspend : CoroSuspends) { auto Suspend = dyn_cast(AnySuspend); if (!Suspend) { +#ifndef NDEBUG AnySuspend->dump(); +#endif report_fatal_error("coro.id must be paired with coro.suspend"); } @@ -392,7 +394,9 @@ void coro::Shape::buildFrom(Function &F) { for (auto AnySuspend : CoroSuspends) { auto Suspend = dyn_cast(AnySuspend); if (!Suspend) { +#ifndef NDEBUG AnySuspend->dump(); +#endif report_fatal_error("coro.id.retcon.* must be paired with " "coro.suspend.retcon"); } @@ -402,15 +406,19 @@ void coro::Shape::buildFrom(Function &F) { auto RI = ResultTys.begin(), RE = ResultTys.end(); for (; SI != SE && RI != RE; ++SI, ++RI) { if ((*SI)->getType() != *RI) { +#ifndef NDEBUG Suspend->dump(); Prototype->getFunctionType()->dump(); +#endif report_fatal_error("argument to coro.suspend.retcon does not " "match corresponding prototype function result"); } } if (SI != SE || RI != RE) { +#ifndef NDEBUG Suspend->dump(); Prototype->getFunctionType()->dump(); +#endif report_fatal_error("wrong number of arguments to coro.suspend.retcon"); } @@ -421,14 +429,18 @@ void coro::Shape::buildFrom(Function &F) { ? cast(SResultTy)->elements() : SResultTy); // forms an ArrayRef using SResultTy, be careful if (SuspendResultTys.size() != ResumeTys.size()) { +#ifndef NDEBUG Suspend->dump(); Prototype->getFunctionType()->dump(); +#endif report_fatal_error("wrong number of results from coro.suspend.retcon"); } for (size_t I = 0, E = ResumeTys.size(); I != E; ++I) { if (SuspendResultTys[I] != ResumeTys[I]) { +#ifndef NDEBUG Suspend->dump(); Prototype->getFunctionType()->dump(); +#endif report_fatal_error("result from coro.suspend.retcon does not " "match corresponding prototype function param"); } @@ -509,12 +521,14 @@ void coro::Shape::emitDealloc(IRBuilder<> &Builder, Value *Ptr, LLVM_ATTRIBUTE_NORETURN static void fail(const Instruction *I, const char *Reason, Value *V) { +#ifndef NDEBUG I->dump(); if (V) { errs() << " Value: "; V->printAsOperand(llvm::errs()); errs() << '\n'; } +#endif report_fatal_error(Reason); } -- cgit v1.2.3