[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