C++ PATCHes to add __is_trivially_*

Paolo Carlini paolo.carlini@oracle.com
Tue Sep 30 17:34:00 GMT 2014


Hi,

On 09/30/2014 07:13 PM, Jason Merrill wrote:
> Ville asked for help with the necessary compiler intrinsics for the 
> is_trivially_* C++11 library traits.
>
> The first patch cleans up a few oddities I noticed with the existing 
> intrinsics.  __is_convertible_to was never implemented and isn't 
> needed.  There's no need for a second grokdeclarator in trait parsing 
> since cp_parser_type_id already does a grokdeclarator.  And the assert 
> at the top of finish_trait_expr is redundant with the gcc_unreachable 
> in the switch.
>
> The second patch adds __is_trivially_copyable, which just uses the 
> existing trivially_copyable_p predicate in the compiler.
>
> The third patch adds __is_trivially_assignable and 
> __is_trivially_constructible, which work by building up an expression 
> representing assignment or object declaration and then scanning it for 
> calls to functions other than trivial special member functions.  Note 
> that there are still bugs in trivial_fn_p that are exposed by this 
> intrinsic.
Great. I think this can be as well marked as PR c++/26099.

By the way, if I remember correctly, the idea of having 
__is_convertible_to leading to unimplemented instead of simply being not 
recognized, goes back to this kind of idea:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2518.html

and Intel too was in favor of somewhat standardizing those intrinsics. 
In fact, both current icc and clang++ accept and implement 
__is_convertible_to.

Paolo.



More information about the Gcc-patches mailing list