diff options
author | Hans Bolinder <[email protected]> | 2014-05-26 08:53:17 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2014-05-26 08:53:17 +0200 |
commit | 21af711057b5369e54d8eabf2f63eda734f5f259 (patch) | |
tree | 2ac5fbb0f35553bb94a8a83574a5c7c1c40629cf /lib | |
parent | 6202139d7680be7df2fc5a6d6138409c1ae780d6 (diff) | |
parent | ddf75def890d6f6a19fe46b22604ac3d8a62040a (diff) | |
download | otp-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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dialyzer/test/small_SUITE_data/src/remote_field2.erl | 17 | ||||
-rw-r--r-- | lib/hipe/cerl/erl_types.erl | 4 |
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]) |