<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 29, 2014 at 5:06 PM, Alexey Samsonov <span dir="ltr"><<a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> IIRC, the problem was that this is not actually undefined behavior. The resulting pointer value might be a "trap representation", but that's implementation-defined behavior, not undefined behavior. UBSan might need to be fixed here.<br>
<br>
<br>
</span>What fix do you suggest? UBSan prints an error report when the unaligned pointer T* is actually used, not when it's created. In LLVM, this "use" is usually an upcast to Value *. So, you may treat UBSan as the tool implementing this trapping behavior.</blockquote></div><br>I think the idea is that casting between pointers doesn't introduce UB, it is dereferencing the pointer, incrementing it, or otherwise using the pointer in some way other than to cast it to another pointer type or to an integer type (or to the void type) which is UB. UBSan is probably just a bit too aggressive here.</div></div>