aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2024-09-15 16:02:13 +0200
committerJason Merrill <jason@redhat.com>2024-09-15 17:47:28 +0200
commit5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3 (patch)
tree648981229c184657b8d41abfb3612416cb1fa136
parent2af87d98e66e57d51f36220de983eff44bae98c8 (diff)
downloadgcc-5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3.zip
gcc-5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3.tar.gz
gcc-5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3.tar.bz2
c++: conversion location
It seems more useful for a conversion to have the location of the source expression rather than the enclosing expression, such as a call that might convert multiple arguments in different ways. As a result, in srcloc17.C the recorded location of 'e' when copy-initialized became that of the initializer rather than the variable, since the semantic was to convert the initializer (at its location) and then initialize the variable from the resulting prvalue. If we instead direct-initialize the variable, the location of the constructor call is that of the variable. gcc/cp/ChangeLog: * call.cc (convert_like_internal) [ck_user]: Use iloc_sentinel. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/srcloc17.C: Adjust initialization.
-rw-r--r--gcc/cp/call.cc4
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/srcloc17.C2
2 files changed, 5 insertions, 1 deletions
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
index d30f36d..664088e 100644
--- a/gcc/cp/call.cc
+++ b/gcc/cp/call.cc
@@ -8669,6 +8669,10 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum,
rvalue, but we know it's read. */
mark_exp_read (expr);
+ /* Give the conversion call the location of EXPR rather than the
+ location of the context that caused the conversion. */
+ iloc_sentinel ils (loc);
+
/* Pass LOOKUP_NO_CONVERSION so rvalue/base handling knows not to allow
any more UDCs. */
expr = build_over_call (cand, LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
diff --git a/gcc/testsuite/g++.dg/cpp2a/srcloc17.C b/gcc/testsuite/g++.dg/cpp2a/srcloc17.C
index a02ea48..4462038 100644
--- a/gcc/testsuite/g++.dg/cpp2a/srcloc17.C
+++ b/gcc/testsuite/g++.dg/cpp2a/srcloc17.C
@@ -90,7 +90,7 @@ bar ()
return false;
}
- S<N> e = __LINE__;
+ S<N> e (__LINE__);
// ^ column 8
S<N> f = 1.0;
if (cmp (e.loc.file_name (), file1))