[PATCH v3] c-family: Add __builtin_assoc_barrier
Jason Merrill
jason@redhat.com
Wed Nov 17 18:35:17 GMT 2021
On 11/11/21 03:49, Matthias Kretz wrote:
> On Wednesday, 8 September 2021 15:49:27 CET Matthias Kretz wrote:
>> On Wednesday, 8 September 2021 15:44:28 CEST Jason Merrill wrote:
>>> On 9/8/21 5:37 AM, Matthias Kretz wrote:
>>>> On Tuesday, 7 September 2021 19:36:22 CEST Jason Merrill wrote:
>>>>>> case PAREN_EXPR:
>>>>>> - RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t,
>>>>>> 0))));
>>>>>> + if (REF_PARENTHESIZED_P (t))
>>>>>> + RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t,
>>>>>> 0))));
>>>>>> + else
>>>>>> + RETURN (RECUR (TREE_OPERAND (t, 0)));
>>>>>
>>>>> I think you need to build a new PAREN_EXPR in the assoc barrier case as
>>>>> well, for it to have any effect in templates.
>>>>
>>>> My intent was to ignore __builtin_assoc_barrier in templates / constexpr
>>>> evaluation since it's not affected by -fassociative-math anyway. Or do
>>>> you
>>>> mean something else?
>>>
>>> I agree about constexpr, but why wouldn't template instantiations be
>>> affected by -fassociative-math like any other function?
>>
>> Oh, that seems like a major misunderstanding on my part. I assumed
>> tsubst_copy_and_build would evaluate the expressions in template arguments
>> 🤦. I'll expand the test and will fix.
>
> Sorry for the long delay. New patch is attached. OK for trunk?
OK.
> New builtin to enable explicit use of PAREN_EXPR in C & C++ code.
>
> Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
>
> gcc/testsuite/ChangeLog:
>
> * c-c++-common/builtin-assoc-barrier-1.c: New test.
>
> gcc/cp/ChangeLog:
>
> * constexpr.c (cxx_eval_constant_expression): Handle PAREN_EXPR
> via cxx_eval_constant_expression.
> * cp-objcp-common.c (names_builtin_p): Handle
> RID_BUILTIN_ASSOC_BARRIER.
> * cp-tree.h: Adjust TREE_LANG_FLAG documentation to include
> PAREN_EXPR in REF_PARENTHESIZED_P.
> (REF_PARENTHESIZED_P): Add PAREN_EXPR.
> * parser.c (cp_parser_postfix_expression): Handle
> RID_BUILTIN_ASSOC_BARRIER.
> * pt.c (tsubst_copy_and_build): If the PAREN_EXPR is not a
> parenthesized initializer, build a new PAREN_EXPR.
> * semantics.c (force_paren_expr): Simplify conditionals. Set
> REF_PARENTHESIZED_P on PAREN_EXPR.
> (maybe_undo_parenthesized_ref): Test PAREN_EXPR for
> REF_PARENTHESIZED_P.
>
> gcc/c-family/ChangeLog:
>
> * c-common.c (c_common_reswords): Add __builtin_assoc_barrier.
> * c-common.h (enum rid): Add RID_BUILTIN_ASSOC_BARRIER.
>
> gcc/c/ChangeLog:
>
> * c-decl.c (names_builtin_p): Handle RID_BUILTIN_ASSOC_BARRIER.
> * c-parser.c (c_parser_postfix_expression): Likewise.
>
> gcc/ChangeLog:
>
> * doc/extend.texi: Document __builtin_assoc_barrier.
> ---
> gcc/c-family/c-common.c | 1 +
> gcc/c-family/c-common.h | 2 +-
> gcc/c/c-decl.c | 1 +
> gcc/c/c-parser.c | 20 ++++++
> gcc/cp/constexpr.c | 8 +++
> gcc/cp/cp-objcp-common.c | 1 +
> gcc/cp/cp-tree.h | 12 ++--
> gcc/cp/parser.c | 14 ++++
> gcc/cp/pt.c | 10 ++-
> gcc/cp/semantics.c | 23 ++----
> gcc/doc/extend.texi | 18 +++++
> .../c-c++-common/builtin-assoc-barrier-1.c | 71 +++++++++++++++++++
> 12 files changed, 158 insertions(+), 23 deletions(-)
> create mode 100644 gcc/testsuite/c-c++-common/builtin-assoc-barrier-1.c
>
>
More information about the Gcc-patches
mailing list