Dialyzer vs re:compile(..., [unicode])

Attila Rajmund Nohl <>
Wed Dec 22 11:16:05 CET 2010


Hello!

I have this small example code, compiled with OTP R14B01:

-module(d).

-export([f/0]).

f() ->
    {ok, MP} = re:compile("abcd", [unicode]).

when I try to analyze it with dialyzer, I get this error:

d.erl:6: The call re:compile("abcd",['unicode',...]) will never return
since it differs in the 2nd argument from the success typing
arguments: (binary() | maybe_improper_list(binary() |
maybe_improper_list(any(),binary() | []) | byte(),binary() |
[]),['anchored' | 'caseless' | 'dollar_endonly' | 'dotall' |
'dupnames' | 'extended' | 'firstline' | 'multiline' |
'no_auto_capture' | 'ungreedy' | {'newline','anycrlf' | 'cr' | 'crlf'
| 'lf'}])

But according to the documentation the re:compile should (and in
practice does) accept the unicode parameter. Unfortunately this error
cascades up, i.e. dialyzer warns about many code which eventually
calls re:compile with unicode parameter, leading to many false
positives. Is there a simple fix for this?


More information about the erlang-questions mailing list