From 2b758fbdc46fc8fe5241bcf1ba5bbd81e6d556ed Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Fri, 27 Mar 2020 21:51:40 -0700 Subject: Error out when EH is used in unsupported code (#2713) This calls `Fatal()` when EH instructions are used in unsupported code. Currently EH instructions are unsupported in Flatten, ReReloop, and DataFlow-using passes. --- src/dataflow/graph.h | 3 +++ src/passes/Flatten.cpp | 5 +++++ src/passes/ReReloop.cpp | 3 +++ 3 files changed, 11 insertions(+) (limited to 'src') diff --git a/src/dataflow/graph.h b/src/dataflow/graph.h index 6a984ad72..114a38f11 100644 --- a/src/dataflow/graph.h +++ b/src/dataflow/graph.h @@ -230,6 +230,9 @@ struct Graph : public UnifiedExpressionVisitor { return doVisitUnreachable(unreachable); } else if (auto* drop = curr->dynCast()) { return doVisitDrop(drop); + } else if (curr->is() || curr->is() || curr->is() || + curr->is()) { + Fatal() << "DataFlow does not support EH instructions yet"; } else { return doVisitGeneric(curr); } diff --git a/src/passes/Flatten.cpp b/src/passes/Flatten.cpp index 0a6a7022a..9139d5dca 100644 --- a/src/passes/Flatten.cpp +++ b/src/passes/Flatten.cpp @@ -68,6 +68,11 @@ struct Flatten return; } + if (curr->is() || curr->is() || curr->is() || + curr->is()) { + Fatal() << "Flatten does not support EH instructions yet"; + } + if (Properties::isControlFlowStructure(curr)) { // handle control flow explicitly. our children do not have control flow, // but they do have preludes which we need to set up in the right place diff --git a/src/passes/ReReloop.cpp b/src/passes/ReReloop.cpp index 8f83f8a8f..004e922ed 100644 --- a/src/passes/ReReloop.cpp +++ b/src/passes/ReReloop.cpp @@ -284,6 +284,9 @@ struct ReReloop final : public Pass { ReturnTask::handle(*this, ret); } else if (auto* un = curr->dynCast()) { UnreachableTask::handle(*this, un); + } else if (curr->is() || curr->is() || curr->is() || + curr->is()) { + Fatal() << "ReReloop does not support EH instructions yet"; } else { // not control flow, so just a simple element getCurrBlock()->list.push_back(curr); -- cgit v1.2.3