[erlang-bugs] Maps behaving oddly on update syntax with literal

Björn-Egil Dahlberg <>
Wed Feb 5 19:19:41 CET 2014


Thank you for reporting. =)

The linter should realize it's not a map when dealing with literals. 
It's just pass-through atm which is plainly obvious.

Try this: 
https://github.com/psyeugenic/otp/commits/egil/erts/fix-maps-beam_load


.. heading back to compiler fixes ..

// Björn-Egil

On 2014-02-05 18:25, José Valim wrote:
> Actually, it seems M#{a := b} always work when M is an empty map:
>
>     -module(foo).
>     -compile(export_all).
>
>     bat(M) ->
>       M#{a := b}.
>
>
> Here is my session:
>
>     1> foo:bat(#{a => b}).
>     #{a => b}
>     2> foo:bat(#{b => b}).
>     ** exception error: bad argument
>          in function  foo:bat/1 (foo.erl, line 5)
>     3> foo:bat(#{}).
>     #{a => b}
>
>
> 3> was supposed to fail. Note (#{})#{a := b} works in the shell (eval).
>
>
>
> *
> *José Valim*
> www.plataformatec.com.br <http://www.plataformatec.com.br/>
> Founder and Lead Developer
> *
>
>
> On Wed, Feb 5, 2014 at 6:16 PM, José Valim < 
> <mailto:>> wrote:
>
>     Hello folks,
>
>     Maps are not working properly on update with a literal (via a var):
>
>         -module(foo).
>         -compile(export_all).
>
>         %% This function does not fail (and it should)
>         bar() ->
>           M = #{},
>           M#{a := b}.
>
>         %% This function fails horribly
>         %%
>         %% =ERROR REPORT==== 5-Feb-2014::18:10:18 ===
>         %% beam/beam_load.c(2065): Error loading function foo:baz/0:
>         op update_map_exact p a r u u a a:
>         %% no specific operation found
>         baz() ->
>           M = nil,
>           M#{a := b}.
>
>
>     I assume there is some sort of inlining happening and discarding
>     useful information.
>     As far as I can see, the Erlang Abstract Format is correct.
>
>     Thank you!
>
>
>     *
>     *José Valim*
>     www.plataformatec.com.br <http://www.plataformatec.com.br/>
>     Founder and Lead Developer
>     *
>
>
>
>
> _______________________________________________
> erlang-bugs mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-bugs

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20140205/7daeb2e7/attachment.html>


More information about the erlang-bugs mailing list