+
if (TREE_CODE (postfix_expression) == COMPONENT_REF)
{
tree instance = TREE_OPERAND (postfix_expression, 0);
@@ -7726,12 +7741,7 @@ cp_parser_postfix_expression (cp_parser
complain);
if (close_paren_loc != UNKNOWN_LOCATION)
- {
- location_t combined_loc = make_location (token->location,
- start_loc,
- close_paren_loc);
- postfix_expression.set_location (combined_loc);
- }
+ postfix_expression.set_location (combined_loc);
/* The POSTFIX_EXPRESSION is certainly no longer an id. */
idk = CP_ID_KIND_NONE;
--- gcc/testsuite/g++.dg/concepts/diagnostic2.C.jj 2020-08-24
21:41:17.644520408 +0200
+++ gcc/testsuite/g++.dg/concepts/diagnostic2.C 2021-03-22 19:04:59.947515357
+0100
@@ -25,6 +25,6 @@ baz()
bar<int>(); // { dg-error "no match" }
/* { dg-begin-multiline-output "" }
bar<int>();
- ^
+ ~~~~~~~~^~
{ dg-end-multiline-output "" } */
}
--- gcc/testsuite/g++.dg/cpp1y/builtin_location.C.jj 2020-01-14
20:02:46.771610014 +0100
+++ gcc/testsuite/g++.dg/cpp1y/builtin_location.C 2021-03-22
17:27:59.121756869 +0100
@@ -103,10 +103,10 @@ A (0 == __builtin_strcmp (f3, FILE_3));
#define FILE_4 "next_file_name.another_suffix"
#line 1 "foobar"
constexpr const char* f4 = this_file
- (
#line 1 FILE_4
- )
+ (
#line 1 "foobar"
+ )
;
A (0 == __builtin_strcmp (f4, FILE_4));
@@ -167,9 +167,9 @@ A (n5 == 9);
// of the function call.
#line 1
constexpr int n6 = this_line
- (
#line 99
- )
+ (
#line 1
+ )
;
A (n6 == 99);
--- gcc/testsuite/g++.dg/cpp2a/srcloc1.C.jj 2020-12-04 16:02:57.300153753
+0100
+++ gcc/testsuite/g++.dg/cpp2a/srcloc1.C 2021-03-20 00:30:14.245469602
+0100
@@ -80,7 +80,7 @@ constexpr source_location s2 = baz <1> (
const source_location *p1 = &s1;
const source_location *p2 = &s2;
static_assert (source_location::current ().line () == __LINE__);
-static_assert (source_location::current ().column () == 42);
+static_assert (source_location::current ().column () == 41);
constexpr bool
quux ()
@@ -106,7 +106,7 @@ quux ()
return false;
if (line1 != line2)
return false;
- if (column != 33)
+ if (column != 32)
return false;
return true;
}
--- gcc/testsuite/g++.dg/cpp2a/srcloc2.C.jj 2020-12-04 16:02:57.300153753
+0100
+++ gcc/testsuite/g++.dg/cpp2a/srcloc2.C 2021-03-20 00:30:14.245469602
+0100
@@ -84,7 +84,7 @@ const source_location *p1 = &s1;
const source_location *p2 = &s2;
static_assert (source_location::current ().line () == __LINE__);
-static_assert (source_location::current ().column () == 42);
+static_assert (source_location::current ().column () == 41);
constexpr bool
quux ()
@@ -110,7 +110,7 @@ quux ()
return false;
if (line1 != line2)
return false;
- if (column != 33)
+ if (column != 32)
return false;
return true;
}
--- gcc/testsuite/g++.dg/cpp2a/srcloc15.C.jj 2020-12-04 16:02:57.300153753
+0100
+++ gcc/testsuite/g++.dg/cpp2a/srcloc15.C 2021-03-20 00:30:14.246469591
+0100
@@ -69,8 +69,8 @@ bar ()
source_location a = foo ();
source_location b = source_location::current ();
source_location c = foo ();
- // ^ column 28
- // ^ column 49
+ // ^ column 27
+ // ^ column 48
const source_location *d[3] = { &a, &b, &c };
const char *file1 = __FILE__;
const char *function1 = __PRETTY_FUNCTION__;
@@ -83,7 +83,7 @@ bar ()
return false;
if (d[j]->line () != line + j + 1)
return false;
- if (d[j]->column () != (j == 1 ? 49 : 28))
+ if (d[j]->column () != (j == 1 ? 48 : 27))
return false;
}
--- gcc/testsuite/g++.dg/cpp2a/srcloc16.C.jj 2020-12-03 23:21:57.709534533 +0100
+++ gcc/testsuite/g++.dg/cpp2a/srcloc16.C 2021-03-20 00:30:14.246469591
+0100
@@ -79,10 +79,10 @@ foo ()
|| u.u.line () + 1 != v.line ()
|| s.a.column () != 18
|| s.b.column () != 18
- || s.c.column () != 50
+ || s.c.column () != 49
|| t.u.column () != 21
|| u.u.column () != 13
- || v.column () != 49)
+ || v.column () != 48)
return false;
return true;
}
--- gcc/testsuite/g++.dg/cpp2a/srcloc19.C.jj 2021-03-20 00:30:14.246469591
+0100
+++ gcc/testsuite/g++.dg/cpp2a/srcloc19.C 2021-03-20 00:30:14.246469591
+0100
@@ -0,0 +1,44 @@
+// PR c++/99672
+// { dg-do compile { target c++20 } }
+
+namespace std {
+ struct source_location {
+ struct __impl {
+ const char *_M_file_name;
+ const char *_M_function_name;
+ unsigned int _M_line, _M_column;
+ };
+ const __impl *__ptr;
+ constexpr source_location () : __ptr (nullptr) {}
+ static consteval source_location
+ current (const void *__p = __builtin_source_location ()) {
+ source_location __ret;
+ __ret.__ptr = static_cast <const __impl *> (__p);
+ return __ret;
+ }
+ constexpr const char *file_name () const {
+ return __ptr ? __ptr->_M_file_name : "";
+ }
+ constexpr const char *function_name () const {
+ return __ptr ? __ptr->_M_function_name : "";
+ }
+ constexpr unsigned line () const {
+ return __ptr ? __ptr->_M_line : 0;
+ }
+ constexpr unsigned column () const {
+ return __ptr ? __ptr->_M_column : 0;
+ }
+ };
+}
+
+constexpr int g(auto...) {
+return std::source_location::current().column();
+}
+
+constexpr int f() {
+return std::source_location::current().column();
+}
+
+constexpr int a = g();
+constexpr int b = f();
+static_assert (a == b);
--- gcc/testsuite/g++.dg/modules/adhoc-1_b.C.jj 2020-12-22 23:50:17.054972550
+0100
+++ gcc/testsuite/g++.dg/modules/adhoc-1_b.C 2021-03-22 19:08:19.338344945
+0100
@@ -6,7 +6,7 @@ void foo ()
massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea ();
}
-// { dg-regexp "\n\[^\n]*adhoc-1_b.C:6:74: error: no matching function for call to 'massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea\\(\\)'\n massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea \\(\\);\n \\^$" }
+// { dg-regexp "\n\[^\n]*adhoc-1_b.C:6:73: error: no matching function for call to
'massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea\\(\\)'\n
massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea \\(\\);\n
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\^~$" }
// { dg-regexp "\nIn module bob, imported at
\[^\n]*adhoc-1_b.C:3:\n\[^\n]*adhoc-1_a.C:5:12: note: candidate: 'int
massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea@bob\\(int\\)'\n
export int massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea
\\(int\\);\n
\\^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$" }
// { dg-regexp "\nIn module bob, imported at
\[^\n]*adhoc-1_b.C:3:\n\[^\n]*adhoc-1_a.C:6:188: note: candidate: 'void
massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea@bob\\(float\\)'\n\[
\t]*export void massivelongnamethatcausesadhoclocationsokeepaddingcharsyourgettheidea
\\(float\\);\n\[
\t]*\\^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~?$" }
// For some reason dg-regexp inserts a blank line
--- gcc/testsuite/g++.dg/modules/macloc-1_c.C.jj 2020-12-22
23:50:17.061972472 +0100
+++ gcc/testsuite/g++.dg/modules/macloc-1_c.C 2021-03-22 18:53:29.682029033
+0100
@@ -8,6 +8,6 @@ void gru ()
you (1);
}
-// { dg-regexp "\[^\n]*macloc-1_c.C:7:8: error: too many arguments to function 'int me@agnes\\(\\)'\nIn module agnes, imported at \[^\n]*macloc-1_b.C:8,\nof module edith, imported at \[^\n]*macloc-1_c.C:3:\n\[^\n]*macloc-1_a.C:11:12: note: declared here\n\[^\n]*macloc-1_a.C:8:20: note: in definition of macro 'BOB'\n" }
+// { dg-regexp "\[^\n]*macloc-1_c.C:7:6: error: too many arguments to function 'int
me@agnes\\(\\)'\nIn module agnes, imported at \[^\n]*macloc-1_b.C:8,\nof module edith,
imported at \[^\n]*macloc-1_c.C:3:\n\[^\n]*macloc-1_a.C:11:12: note: declared
here\n\[^\n]*macloc-1_a.C:8:20: note: in definition of macro 'BOB'\n" }
-// { dg-regexp "\[^\n]*macloc-1_c.C:8:9: error: too many arguments to function 'int you@agnes\\(\\)'\nIn module agnes, imported at \[^\n]*macloc-1_b.C:8,\nof module edith, imported at \[^\n]*macloc-1_c.C:3:\n\[^\n]*macloc-1_a.C:12:14: note: declared here\n\[^\n]*macloc-1_a.C:9:22: note: in definition of macro 'KEVIN'\n" }
+// { dg-regexp "\[^\n]*macloc-1_c.C:8:7: error: too many arguments to function 'int
you@agnes\\(\\)'\nIn module agnes, imported at \[^\n]*macloc-1_b.C:8,\nof module edith,
imported at \[^\n]*macloc-1_c.C:3:\n\[^\n]*macloc-1_a.C:12:14: note: declared
here\n\[^\n]*macloc-1_a.C:9:22: note: in definition of macro 'KEVIN'\n" }
--- gcc/testsuite/g++.dg/modules/macloc-1_d.C.jj 2020-12-22
23:50:17.061972472 +0100
+++ gcc/testsuite/g++.dg/modules/macloc-1_d.C 2021-03-22 18:53:57.817722777
+0100
@@ -9,5 +9,5 @@ void margo ()
gru (2);
}
-// { dg-regexp "\[^\n]*macloc-1_d.C:8:8: error: too many arguments to function 'int me@agnes\\(\\)'\nIn module agnes, imported at \[^\n]*macloc-1_d.C:4:\n\[^\n]*macloc-1_a.C:11:12: note: declared here\n\[^\n]*macloc-1_a.C:8:20: note: in definition of macro 'BOB'\n" }
-// { dg-regexp "\[^\n]*macloc-1_d.C:9:9: error: too many arguments to function
'void gru@edith\\(\\)'\nIn module edith, imported at
\[^\n]*macloc-1_d.C:3:\n\[^\n]*macloc-1_b.C:10:20: note: declared
here\n\[^\n]*macloc-1_b.C:6:19: note: in definition of macro 'STUART'\n" }
+// { dg-regexp "\[^\n]*macloc-1_d.C:8:6: error: too many arguments to function 'int
me@agnes\\(\\)'\nIn module agnes, imported at
\[^\n]*macloc-1_d.C:4:\n\[^\n]*macloc-1_a.C:11:12: note: declared
here\n\[^\n]*macloc-1_a.C:8:20: note: in definition of macro 'BOB'\n" }
+// { dg-regexp "\[^\n]*macloc-1_d.C:9:7: error: too many arguments to function
'void gru@edith\\(\\)'\nIn module edith, imported at
\[^\n]*macloc-1_d.C:3:\n\[^\n]*macloc-1_b.C:10:20: note: declared
here\n\[^\n]*macloc-1_b.C:6:19: note: in definition of macro 'STUART'\n" }
--- gcc/testsuite/g++.dg/plugin/diagnostic-test-expressions-1.C.jj
2020-01-14 20:02:46.923607737 +0100
+++ gcc/testsuite/g++.dg/plugin/diagnostic-test-expressions-1.C 2021-03-22
19:05:54.528921226 +0100
@@ -900,7 +900,7 @@ void test_methods ()
((base *)1)->priv (); // { dg-error " is private " }
/* { dg-begin-multiline-output "" }
((base *)1)->priv ();
- ^
+ ~~~~~~~~~~~~~~~~~~^~
{ dg-end-multiline-output "" }
{ dg-begin-multiline-output "" }
int priv ();
--- libstdc++-v3/testsuite/18_support/source_location/consteval.cc.jj
2021-01-05 00:13:58.354296528 +0100
+++ libstdc++-v3/testsuite/18_support/source_location/consteval.cc
2021-03-22 22:17:46.427025787 +0100
@@ -75,43 +75,43 @@ int main ()
using namespace std::string_view_literals;
static_assert (std::source_location::current ().line () == __LINE__);
- static_assert (std::source_location::current ().column () == 49);
+ static_assert (std::source_location::current ().column () == 48);
constexpr std::string_view main_sl_fn_name(main_sl.function_name());
constexpr std::string_view main_sl_fi_name(main_sl.file_name());
static_assert(main_sl.line() == main_sl_line);
- // closing paren of call
- static_assert(main_sl.column() == 74);
+ // opening paren of call
+ static_assert(main_sl.column() == 73);
static_assert(main_sl_fn_name.ends_with("main()"sv));
static_assert(main_sl_fi_name.ends_with("consteval.cc"sv));
constexpr std::string_view f_arg_sl_fn_name(f_arg_sl.function_name());
constexpr std::string_view f_arg_sl_fi_name(f_arg_sl.file_name());
static_assert(f_arg_sl.line() == f_arg_sl_line);
- // closing paren of call
- static_assert(f_arg_sl.column() == 74);
+ // opening paren of call
+ static_assert(f_arg_sl.column() == 73);
static_assert(f_arg_sl_fn_name.ends_with("main()"sv));
static_assert(f_arg_sl_fi_name.ends_with("consteval.cc"sv));
constexpr std::string_view g_sl_fn_name(g_sl.function_name());
constexpr std::string_view g_sl_fi_name(g_sl.file_name());
static_assert(g_sl.line() == g_sl_line);
- static_assert(g_sl.column() == 58); // closing paren of call
+ static_assert(g_sl.column() == 57); // opening paren of call
static_assert(g_sl_fn_name.ends_with("g()"sv));
static_assert(g_sl_fi_name.ends_with("consteval.cc"sv));
constexpr std::string_view h_sl_fn_name(h_sl.function_name());
constexpr std::string_view h_sl_fi_name(h_sl.file_name());
static_assert(h_sl.line() == 23);
- static_assert(h_sl.column() == 58); // closing paren of call
+ static_assert(h_sl.column() == 57); // opening paren of call
static_assert(h_sl_fn_name.ends_with("h()"sv));
static_assert(h_sl_fi_name.ends_with("srcloc.h"sv));
constexpr std::string_view member_main_sl_fn_name(member_main_sl.member.function_name());
constexpr std::string_view
member_main_sl_fi_name(member_main_sl.member.file_name());
static_assert(member_main_sl.member.line() == main_sl_line);
- static_assert(member_main_sl.member.column() == 74);
+ static_assert(member_main_sl.member.column() == 73);
static_assert(member_main_sl_fn_name.ends_with("main()"sv));
static_assert(member_main_sl_fi_name.ends_with("consteval.cc"sv));
@@ -138,8 +138,8 @@ int main ()
constexpr std::string_view f_sl_fi_name(f_sl.file_name());
constexpr std::string_view f_sl_fn_name(f_sl.function_name());
static_assert(f_sl.line() == f_sl_line);
- // closing paren of call
- static_assert(f_sl.column() == 43);
+ // opening paren of call
+ static_assert(f_sl.column() == 42);
static_assert(f_sl_fn_name.ends_with("main()"sv));
static_assert(f_sl_fi_name.ends_with("consteval.cc"sv));
--- libstdc++-v3/testsuite/18_support/source_location/1.cc.jj 2021-01-05 00:13:58.354296528 +0100
+++ libstdc++-v3/testsuite/18_support/source_location/1.cc 2021-03-22
22:19:16.624026315 +0100
@@ -87,37 +87,37 @@ int main ()
std::string_view main_sl_fn_name(main_sl.function_name());
std::string_view main_sl_fi_name(main_sl.file_name());
VERIFY(main_sl.line() == main_sl_line);
- // closing paren of call
- VERIFY(main_sl.column() == 64);
+ // opening paren of call
+ VERIFY(main_sl.column() == 63);
VERIFY(main_sl_fn_name.ends_with("main()"sv));
VERIFY(main_sl_fi_name.ends_with("1.cc"sv));
std::string_view f_arg_sl_fn_name(f_arg_sl.function_name());
std::string_view f_arg_sl_fi_name(f_arg_sl.file_name());
VERIFY(f_arg_sl.line() == f_arg_sl_line);
- // closing paren of call
- VERIFY(f_arg_sl.column() == 64);
+ // opening paren of call
+ VERIFY(f_arg_sl.column() == 63);
VERIFY(f_arg_sl_fn_name.ends_with("main()"sv));
VERIFY(f_arg_sl_fi_name.ends_with("1.cc"sv));
std::string_view g_sl_fn_name(g_sl.function_name());
std::string_view g_sl_fi_name(g_sl.file_name());
VERIFY(g_sl.line() == g_sl_line);
- VERIFY(g_sl.column() == 58); // closing paren of call
+ VERIFY(g_sl.column() == 57); // opening paren of call
VERIFY(g_sl_fn_name.ends_with("g()"sv));
VERIFY(g_sl_fi_name.ends_with("1.cc"sv));
std::string_view h_sl_fn_name(h_sl.function_name());
std::string_view h_sl_fi_name(h_sl.file_name());
VERIFY(h_sl.line() == 23);
- VERIFY(h_sl.column() == 58); // closing paren of call
+ VERIFY(h_sl.column() == 57); // opening paren of call
VERIFY(h_sl_fn_name.ends_with("h()"sv));
VERIFY(h_sl_fi_name.ends_with("srcloc.h"sv));
std::string_view member_main_sl_fn_name(member_main_sl.member.function_name());
std::string_view member_main_sl_fi_name(member_main_sl.member.file_name());
VERIFY(member_main_sl.member.line() == main_sl_line);
- VERIFY(member_main_sl.member.column() == 64);
+ VERIFY(member_main_sl.member.column() == 63);
VERIFY(member_main_sl_fn_name.ends_with("main()"sv));
VERIFY(member_main_sl_fi_name.ends_with("1.cc"sv));
@@ -144,8 +144,8 @@ int main ()
std::string_view f_sl_fi_name(f_sl.file_name());
std::string_view f_sl_fn_name(f_sl.function_name());
VERIFY(f_sl.line() == f_sl_line);
- // closing paren of call
- VERIFY(f_sl.column() == 33);
+ // opening paren of call
+ VERIFY(f_sl.column() == 32);
VERIFY(f_sl_fn_name.ends_with("main()"sv));
VERIFY(f_sl_fi_name.ends_with("1.cc"sv));
Jakub