<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">One last thing.<div><br></div><div><blockquote type="cite"><div> a(N, B) -><br>     fun (<<L:N/bits, _:1, R/bits>>) -> % THIS IS LINE 266<br>         <<L/bits, 1:1, R/bits>> <br>     end(B).</div></blockquote><br><div>How to disable the following warning only for this function:</div><div>src/foo.erl:266: Warning: NOT OPTIMIZED: sub binary is used or returned</div><div><br></div><div>is there a way to do it by using <b>-compile(...)</b> directive?</div><div><br></div><div><br></div><div><div>Regards,</div><div>Zabrane</div><div><br></div><div><div>On Dec 24, 2011, at 8:17 PM, Jachym Holecek wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div># Zabrane Mickael 2011-12-24:<br><blockquote type="cite">Hi folks,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Here's my code:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">%%--------------------------------------------------------------------<br></blockquote><blockquote type="cite">%% @doc Set the bit at position Index to 1 in the binary Bin.<br></blockquote><blockquote type="cite">%% @end<br></blockquote><blockquote type="cite">%%--------------------------------------------------------------------<br></blockquote><blockquote type="cite">-spec set(Bin :: binary(), Index :: non_neg_integer()) -> binary().<br></blockquote><blockquote type="cite">set(<<1:1, _/bits>> = Bin, 0) -><br></blockquote><blockquote type="cite">    Bin;<br></blockquote><blockquote type="cite">set(<<0:1, Rest/bits>>, 0) -><br></blockquote><blockquote type="cite">    <<1:1, Rest/bits>>;<br></blockquote><blockquote type="cite">set(Bin, Index) when Index > 0 -><br></blockquote><blockquote type="cite">    Before = Index - 1,<br></blockquote><blockquote type="cite">    <<Head:Before, _:1, Rest/bits>> = Bin,<br></blockquote><blockquote type="cite">    <<Head:Before, 1:1, Rest/bits>>.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">After compiling, I'm getting the following warnings:<br></blockquote><blockquote type="cite">src/foo.erl:248: Warning: INFO: the '=' operator will prevent delayed sub binary optimization<br></blockquote><blockquote type="cite">src/foo.erl:248: Warning: INFO: the '=' operator will prevent delayed sub binary optimization<br></blockquote><blockquote type="cite">src/foo.erl:250: Warning: NOT OPTIMIZED: sub binary is used or returned<br></blockquote><blockquote type="cite">src/foo.erl:254: Warning: NOT OPTIMIZED: sub binary is used or returned<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">What's the best/optimized solution and how to get rid of these warnings?<br></blockquote><br>Binary matching is *much* more powerful than what it looks like at first:<br><br>  -module(a).<br>  -export([a/2]).<br><br>  a(N, B) -><br>      fun (<<L:N/bits, _:1, R/bits>>) -><br>          <<L/bits, 1:1, R/bits>> <br>      end(B).<br><br>The compiler refuses the saner form (doing the binary match in a/1's head<br>directly) quoting the delusion that N isn't bound at that point... pity.<br><br>Have fun,<br><span class="Apple-tab-span" style="white-space:pre">       </span>-- Jachym<br></div></blockquote></div><div><br>
</div>
<br></div></div></body></html>