aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Bolinder <[email protected]>2014-05-26 08:53:17 +0200
committerHans Bolinder <[email protected]>2014-05-26 08:53:17 +0200
commit21af711057b5369e54d8eabf2f63eda734f5f259 (patch)
tree2ac5fbb0f35553bb94a8a83574a5c7c1c40629cf
parent6202139d7680be7df2fc5a6d6138409c1ae780d6 (diff)
parentddf75def890d6f6a19fe46b22604ac3d8a62040a (diff)
downloadotp-21af711057b5369e54d8eabf2f63eda734f5f259.tar.gz
otp-21af711057b5369e54d8eabf2f63eda734f5f259.tar.bz2
otp-21af711057b5369e54d8eabf2f63eda734f5f259.zip
Merge branch 'hb/hipe/field_with_remote/OTP-11918' into maint
* hb/hipe/field_with_remote/OTP-11918: hipe: fix a bug concerning typed record fields
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/remote_field2.erl17
-rw-r--r--lib/hipe/cerl/erl_types.erl4
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/src/remote_field2.erl b/lib/dialyzer/test/small_SUITE_data/src/remote_field2.erl
new file mode 100644
index 0000000000..35687e22ec
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/remote_field2.erl
@@ -0,0 +1,17 @@
+-module(remote_field2).
+
+-export([handle_cast/2]).
+
+-record(state, {tcp_socket :: inet:socket()}).
+
+-spec handle_cast(_,_) ->
+ {noreply,_} |
+ {stop,{shutdown,connection_closed},
+ #state{tcp_socket :: port()}}.
+handle_cast({send, Message}, #state{tcp_socket = TCPSocket} = State) ->
+ case gen_tcp:send(TCPSocket, Message) of
+ ok ->
+ {noreply, State};
+ {error, closed} ->
+ {stop, {shutdown, connection_closed}, State}
+ end.
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl
index 06c0d10296..67661130a5 100644
--- a/lib/hipe/cerl/erl_types.erl
+++ b/lib/hipe/cerl/erl_types.erl
@@ -4487,7 +4487,9 @@ get_mod_record([{FieldName, DeclType}|Left1],
[{FieldName, ModType}|Left2], Acc) ->
ModTypeNoVars = subst_all_vars_to_any(ModType),
case
- contains_remote(ModTypeNoVars) orelse t_is_subtype(ModTypeNoVars, DeclType)
+ contains_remote(ModTypeNoVars)
+ orelse contains_remote(DeclType)
+ orelse t_is_subtype(ModTypeNoVars, DeclType)
of
false -> {error, FieldName};
true -> get_mod_record(Left1, Left2, [{FieldName, ModType}|Acc])