aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/compile.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2019-07-30 08:34:51 +0200
committerBjörn Gustavsson <[email protected]>2019-07-30 10:26:27 +0200
commit773e3d0f4a2d978a7ec6be9ed639eb1941d92d6c (patch)
tree8c0d1885170d467ca142ca1fb04495821e8908d1 /lib/compiler/src/compile.erl
parent478488a2e75e8e73b8dfc7b6f22fd1f0bfbc04eb (diff)
downloadotp-773e3d0f4a2d978a7ec6be9ed639eb1941d92d6c.tar.gz
otp-773e3d0f4a2d978a7ec6be9ed639eb1941d92d6c.tar.bz2
otp-773e3d0f4a2d978a7ec6be9ed639eb1941d92d6c.zip
Fix compiler crash when compiling with +no_type_opt
If the `no_type_opt` option was given, the compiler would crash when attempting to compile containing with a `try`...`after` construct, such as this code: foo() -> try make_ref() after ok end. To avoid having this bug re-appear, test the `no_type_opt` option in the test suites. https://bugs.erlang.org/browse/ERL-997
Diffstat (limited to 'lib/compiler/src/compile.erl')
-rw-r--r--lib/compiler/src/compile.erl7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 28db8986ff..0325c714d0 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -268,8 +268,11 @@ expand_opt(r21, Os) ->
[no_put_tuple2 | expand_opt(no_bsm3, Os)];
expand_opt({debug_info_key,_}=O, Os) ->
[encrypt_debug_info,O|Os];
-expand_opt(no_type_opt, Os) ->
- [no_ssa_opt_type_start,
+expand_opt(no_type_opt=O, Os) ->
+ %% Be sure to keep the no_type_opt option so that it will
+ %% be recorded in the BEAM file, allowing the test suites
+ %% to recompile the file with this option.
+ [O,no_ssa_opt_type_start,
no_ssa_opt_type_continue,
no_ssa_opt_type_finish | Os];
expand_opt(O, Os) -> [O|Os].