From b3775b5e4e150439276ad3d34f1bb564b28e8ef5 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 6 Oct 2023 16:41:13 -0700 Subject: Automatically discard global effects in the rare passes that add effects (#5999) All logging/instrumentation passes need to do this, to avoid us using stale global effects that are too low (too high is not optimal either, but at least it cannot cause bugs). --- src/pass.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/pass.h') diff --git a/src/pass.h b/src/pass.h index 090aa8d33..da9a12b95 100644 --- a/src/pass.h +++ b/src/pass.h @@ -466,6 +466,13 @@ public: // For more details see the LocalStructuralDominance class. virtual bool requiresNonNullableLocalFixups() { return true; } + // Many passes can remove effects, for example, by finding some path is not + // reached and removing a throw or a call there. The few passes that *add* + // effects must mark themselves as such, so that we know to discard global + // effects after running them. For example, a logging pass that adds new calls + // to imports must override this to return true. + virtual bool addsEffects() { return false; } + std::string name; PassRunner* getPassRunner() { return runner; } -- cgit v1.2.3