On Jun 29, 2013, at 11:38 AM, Howard Hinnant <[email protected]> wrote:

> +inline _LIBCPP_INLINE_VISIBILITY
> +_LIBCPP_CONSTEXPR
> +launch
> +operator~(launch __x)
> +{
> +    return static_cast<launch>(~static_cast<__launch_underlying_type>(__x));
> +}

This may cause problems down the line, because it sets bits in launch that are 
not defined to have any meaning.
I ran into this kind of stuff when trying to use UBSan.

To prevent this problem, you can AND the result with 3, clearing all the unused 
bits.

> +    return static_cast<launch>(~static_cast<__launch_underlying_type>(__x) & 
> 3);

(Yeah, I hate the naked '3' there too.)

-- Marshall

Marshall Clow     Idio Software   <mailto:[email protected]>

A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly 
moderated down to (-1, Flamebait).
        -- Yu Suzuki


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to