[gcc r14-6505] c++: copy location to AGGR_INIT_EXPR

Jason Merrill jason@gcc.gnu.org
Wed Dec 13 16:48:06 GMT 2023


https://gcc.gnu.org/g:52b4b7d7f5c7c09f5aaf3934978de9702d8c214b

commit r14-6505-g52b4b7d7f5c7c09f5aaf3934978de9702d8c214b
Author: Jason Merrill <jason@redhat.com>
Date:   Tue Dec 12 23:48:57 2023 -0500

    c++: copy location to AGGR_INIT_EXPR
    
    When building an AGGR_INIT_EXPR from a CALL_EXPR, we shouldn't lose location
    information.
    
    gcc/cp/ChangeLog:
    
            * tree.cc (build_aggr_init_expr): Copy EXPR_LOCATION.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/cpp1y/constexpr-nsdmi7b.C: Adjust line.
            * g++.dg/template/copy1.C: Likewise.

Diff:
---
 gcc/cp/tree.cc                                 | 1 +
 gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi7b.C | 4 ++--
 gcc/testsuite/g++.dg/template/copy1.C          | 2 +-
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc
index da4d5c51f07..c4e41fd7b5c 100644
--- a/gcc/cp/tree.cc
+++ b/gcc/cp/tree.cc
@@ -689,6 +689,7 @@ build_aggr_init_expr (tree type, tree init)
       CALL_EXPR_OPERATOR_SYNTAX (rval) = CALL_EXPR_OPERATOR_SYNTAX (init);
       CALL_EXPR_ORDERED_ARGS (rval) = CALL_EXPR_ORDERED_ARGS (init);
       CALL_EXPR_REVERSE_ARGS (rval) = CALL_EXPR_REVERSE_ARGS (init);
+      SET_EXPR_LOCATION (rval, EXPR_LOCATION (init));
     }
   else
     rval = init;
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi7b.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi7b.C
index a410e482664..586ee54124c 100644
--- a/gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi7b.C
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi7b.C
@@ -20,8 +20,8 @@ bar()
 {
   A a = foo();
   a.p->n = 5;
-  return a;
-} // { dg-error "non-.constexpr." "" { target c++20_down } }
+  return a; // { dg-error "non-.constexpr." "" { target c++20_down } }
+}
 
 constexpr int
 baz()
diff --git a/gcc/testsuite/g++.dg/template/copy1.C b/gcc/testsuite/g++.dg/template/copy1.C
index eacd9e2c025..7e0a3805a77 100644
--- a/gcc/testsuite/g++.dg/template/copy1.C
+++ b/gcc/testsuite/g++.dg/template/copy1.C
@@ -6,10 +6,10 @@
 
 struct A
 {
-  // { dg-error "reference" "" { target c++14_down } .+1 }
   A(A&);			// { dg-message "A::A" "" { target c++14_down } }
   template <class T> A(T); 	// { dg-message "A::A" "" { target c++14_down } }
 };
 
+// { dg-error "reference" "" { target c++14_down } .+1 }
 A a = 0; // { dg-error "no match" "" { target c++14_down } }


More information about the Gcc-cvs mailing list