aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2014-06-17 10:40:44 +0200
committerBjörn Gustavsson <[email protected]>2014-06-17 10:40:44 +0200
commita182917681b28ec7129adf73d863fa6b11670c10 (patch)
tree88beb1146624320bf9f84e2f15e79cc73b7ebfc1
parent2ad1bf818447c8a7ff380e93f43a7a6105a77d6f (diff)
parent9a9b77c72f95123ac0e6d1dab7f907a4f0f2e6a6 (diff)
downloadotp-a182917681b28ec7129adf73d863fa6b11670c10.tar.gz
otp-a182917681b28ec7129adf73d863fa6b11670c10.tar.bz2
otp-a182917681b28ec7129adf73d863fa6b11670c10.zip
Merge branch 'bjorn/compiler/fix-latin1-fallback/OTP-11987' into maint
* bjorn/compiler/fix-latin1-fallback/OTP-11987: Fix handling of latin1 characters in false ifdef branches
-rw-r--r--lib/compiler/test/warnings_SUITE.erl14
-rw-r--r--lib/stdlib/src/epp.erl16
2 files changed, 28 insertions, 2 deletions
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index ad4ad91f74..0637041873 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -662,6 +662,20 @@ latin1_fallback(Conf) when is_list(Conf) ->
{warnings,[{1,compile,reparsing_invalid_unicode}]}
}],
[] = run(Conf, Ts2),
+
+ Ts3 = [{latin1_fallback3,
+ %% Test that the compiler fall backs to latin-1 with
+ %% a warning if a file has no encoding and does not
+ %% contain correct UTF-8 sequences.
+ <<"-ifdef(NOTDEFINED).
+ t(_) -> \"",246,"\";
+ t(x) -> ok.
+ -endif.
+ ">>,
+ [],
+ {warnings,[{2,compile,reparsing_invalid_unicode}]}}],
+ [] = run(Conf, Ts3),
+
ok.
%%%
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index 9b506b0a44..5f8637c118 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -1121,8 +1121,20 @@ skip_toks(From, St, [I|Sis]) ->
skip_toks(From, St#epp{location=Cl}, Sis);
{ok,_Toks,Cl} ->
skip_toks(From, St#epp{location=Cl}, [I|Sis]);
- {error,_E,Cl} ->
- skip_toks(From, St#epp{location=Cl}, [I|Sis]);
+ {error,E,Cl} ->
+ case E of
+ {_,file_io_server,invalid_unicode} ->
+ %% The compiler needs to know that there was
+ %% invalid unicode characters in the file
+ %% (and there is no point in continuing anyway
+ %% since io server process has terminated).
+ epp_reply(From, {error,E}),
+ leave_file(wait_request(St), St);
+ _ ->
+ %% Some other invalid token, such as a bad floating
+ %% point number. Just ignore it.
+ skip_toks(From, St#epp{location=Cl}, [I|Sis])
+ end;
{eof,Cl} ->
leave_file(From, St#epp{location=Cl,istk=[I|Sis]});
{error,_E} ->