summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2019-08-14 03:53:31 +0000
committerJohn McCall <rjmccall@apple.com>2019-08-14 03:53:31 +0000
commit137b50f0c3b1803d3a743cc2b863fe1acb6f62e1 (patch)
treedc3e8685a4d9500b1c77812c35408595784f0440
parent382921418554987bb1757964846545b0cfc14a63 (diff)
downloadbcm5719-llvm-137b50f0c3b1803d3a743cc2b863fe1acb6f62e1.tar.gz
bcm5719-llvm-137b50f0c3b1803d3a743cc2b863fe1acb6f62e1.zip
Guard dumps in the coro intrinsic validation logic behind NDEBUG checks. dump() is not guaranteed to be defined in all builds.
llvm-svn: 368790
-rw-r--r--llvm/lib/Transforms/Coroutines/Coroutines.cpp14
1 files changed, 14 insertions, 0 deletions
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<CoroSuspendInst>(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<CoroSuspendRetconInst>(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<StructType>(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);
}
OpenPOWER on IntegriCloud