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? New builtin to enable explicit use of PAREN_EXPR in C & C++ code. Signed-off-by: Matthias Kretz 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 -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de stdβ‚“::simd ──────────────────────────────────────────────────────────────────────────