diff options
author | Björn Gustavsson <[email protected]> | 2019-07-30 08:34:51 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-07-30 10:26:27 +0200 |
commit | 773e3d0f4a2d978a7ec6be9ed639eb1941d92d6c (patch) | |
tree | 8c0d1885170d467ca142ca1fb04495821e8908d1 /lib/compiler/src/compile.erl | |
parent | 478488a2e75e8e73b8dfc7b6f22fd1f0bfbc04eb (diff) | |
download | otp-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.erl | 7 |
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]. |