diff options
author | Jason Merrill <jason@redhat.com> | 2020-03-24 18:25:17 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2020-03-24 18:25:17 -0400 |
commit | 6e771c087b10d5b730240ea35478eab8694c9c5d (patch) | |
tree | 4e040af85a82560387410b4b8c76ab46f9334b28 /gcc | |
parent | 07f8bcc6ea9f3c0850a56a7431d866178d5cee92 (diff) | |
download | gcc-6e771c087b10d5b730240ea35478eab8694c9c5d.zip gcc-6e771c087b10d5b730240ea35478eab8694c9c5d.tar.gz gcc-6e771c087b10d5b730240ea35478eab8694c9c5d.tar.bz2 |
c++: Give more expressions locations.
In the testcase for PR94186, we have a SCOPE_REF with no location even
though at one point it was in a cp_expr which had a location. So let's make
the cp_expr constructor that takes a location apply it to the expression
when possible.
gcc/cp/ChangeLog
2020-03-24 Jason Merrill <jason@redhat.com>
* cp-tree.h (cp_expr): When constructing from an expr and a
location, call protected_set_expr_location.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/stmtexpr15.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/error26.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wnoexcept1.C | 2 |
5 files changed, 12 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 59db03c..7ae4128 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2020-03-24 Jason Merrill <jason@redhat.com> + + * cp-tree.h (cp_expr): When constructing from an expr and a + location, call protected_set_expr_location. + 2020-03-23 Patrick Palka <ppalka@redhat.com> PR c++/93805 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 0783b31..4e1d0f1 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -59,7 +59,10 @@ public: m_value (value), m_loc (cp_expr_location (m_value)) {} cp_expr (tree value, location_t loc): - m_value (value), m_loc (loc) {} + m_value (value), m_loc (loc) + { + protected_set_expr_location (value, loc); + } /* Implicit conversions to tree. */ operator tree () const { return m_value; } diff --git a/gcc/testsuite/g++.dg/ext/stmtexpr15.C b/gcc/testsuite/g++.dg/ext/stmtexpr15.C index 10c4886..27406e1 100644 --- a/gcc/testsuite/g++.dg/ext/stmtexpr15.C +++ b/gcc/testsuite/g++.dg/ext/stmtexpr15.C @@ -4,5 +4,5 @@ void foo() { int x[({ return; })]; // { dg-error "could not convert" } -// { dg-error "12:size of array .x. has non-integral" "" { target *-*-* } .-1 } +// { dg-error "9:size of array .x. has non-integral" "" { target *-*-* } .-1 } } diff --git a/gcc/testsuite/g++.dg/parse/error26.C b/gcc/testsuite/g++.dg/parse/error26.C index 95f2991..4005fd5 100644 --- a/gcc/testsuite/g++.dg/parse/error26.C +++ b/gcc/testsuite/g++.dg/parse/error26.C @@ -4,7 +4,7 @@ void foo() { if (({int c[2];})) ; // { dg-error "7:ISO C.. forbids" "7" } - // { dg-error "17:could not convert" "17" { target *-*-* } .-1 } + // { dg-error "7:could not convert" "17" { target *-*-* } .-1 } } void bar() diff --git a/gcc/testsuite/g++.dg/warn/Wnoexcept1.C b/gcc/testsuite/g++.dg/warn/Wnoexcept1.C index 93210de..4fac367 100644 --- a/gcc/testsuite/g++.dg/warn/Wnoexcept1.C +++ b/gcc/testsuite/g++.dg/warn/Wnoexcept1.C @@ -7,7 +7,7 @@ // We expect a warning at the declaration of construct2, since Automatic2 is // defined below; we don't expect one for construct1, because Automatic1 is // defined in the fake system header. -// { dg-warning "noexcept-expression" "" { target *-*-* } 15 } +// { dg-warning "noexcept-expression" "" { target *-*-* } 16 } class Automatic2 { public: |