aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-12-04 08:08:39 +0100
committerJakub Jelinek <jakub@redhat.com>2020-12-04 08:08:39 +0100
commit9715663f7db7ac57121c9a60dd0078787e274f66 (patch)
tree6f51f472f041ac4178e04e91980900ff0a49a806 /gcc
parentb8dd0ef74dd799a0a6d35e912239f0819912890f (diff)
downloadgcc-9715663f7db7ac57121c9a60dd0078787e274f66.zip
gcc-9715663f7db7ac57121c9a60dd0078787e274f66.tar.gz
gcc-9715663f7db7ac57121c9a60dd0078787e274f66.tar.bz2
c++: Change __builtin_source_location to use __PRETTY_FUNCTION__ instead of __FUNCTION__ [PR80780]
On Tue, Dec 01, 2020 at 01:03:52PM +0000, Jonathan Wakely via Gcc-patches wrote: > I mentioned in PR 80780 that a __builtin__PRETTY_FUNCTION would have > been nice, because __FUNCTION__ isn't very useful for C++, because of > overloading and namespace/class scopes. There are an unlimited number > of functions that have __FUNCTION__ == "s", e.g. "ns::s(int)" and > "ns::s()" and "another_scope::s::s<T...>(T...)" etc. > > Since __builtin_source_location() can do whatever it wants (without > needing to add __builtin__PRETTY_FUNCTION) it might be nice to use the > __PRETTY_FUNCTION__ string. JeanHeyd's tests would still need changes, > because the name would be "s::s(void*)" not "s::s" but that still > seems better for users. When I've added template tests for the previous patch, I have noticed that the current __builtin_source_location behavior is not really __FUNCTION__, just close, because e.g. in function template __FUNCTION__ is still "bar" but __builtin_source_location gave "bar<0>". Anyway, this patch implements above request to follow __PRETTY_FUNCTION__ (on top of the earlier posted patch). 2020-12-04 Jakub Jelinek <jakub@redhat.com> PR c++/80780 * cp-gimplify.c (fold_builtin_source_location): Use 2 instead of 0 as last argument to cxx_printable_name. * g++.dg/cpp2a/srcloc1.C (quux): Use __PRETTY_FUNCTION__ instead of function. * g++.dg/cpp2a/srcloc2.C (quux): Likewise. * g++.dg/cpp2a/srcloc15.C (S::S): Likewise. (bar): Likewise. Adjust expected column. * g++.dg/cpp2a/srcloc17.C (S::S): Likewise. (bar): Likewise. Adjust expected column. * testsuite/18_support/source_location/1.cc (main): Adjust for __builtin_source_location using __PRETTY_FUNCTION__-like names instead __FUNCTION__-like. * testsuite/18_support/source_location/consteval.cc (main): Likewise.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/cp-gimplify.c2
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/srcloc1.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/srcloc15.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/srcloc17.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/srcloc2.C2
5 files changed, 13 insertions, 13 deletions
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index bafcaf5..8bbcf01 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -3005,7 +3005,7 @@ fold_builtin_source_location (location_t loc)
const char *name = "";
if (current_function_decl)
- name = cxx_printable_name (current_function_decl, 0);
+ name = cxx_printable_name (current_function_decl, 2);
val = build_string_literal (strlen (name) + 1, name);
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/srcloc1.C b/gcc/testsuite/g++.dg/cpp2a/srcloc1.C
index 6e19ff7..029a037 100644
--- a/gcc/testsuite/g++.dg/cpp2a/srcloc1.C
+++ b/gcc/testsuite/g++.dg/cpp2a/srcloc1.C
@@ -88,7 +88,7 @@ quux ()
const char *file1 = source_location::current ().file_name ();
const char *file2 = __FILE__;
const char *function1 = source_location::current ().function_name ();
- const char *function2 = __FUNCTION__;
+ const char *function2 = __PRETTY_FUNCTION__;
int line1 = source_location::current ().line ();
int line2 = __LINE__ - 1;
int column
diff --git a/gcc/testsuite/g++.dg/cpp2a/srcloc15.C b/gcc/testsuite/g++.dg/cpp2a/srcloc15.C
index 30e5845..d02617e 100644
--- a/gcc/testsuite/g++.dg/cpp2a/srcloc15.C
+++ b/gcc/testsuite/g++.dg/cpp2a/srcloc15.C
@@ -44,12 +44,12 @@ struct S {
source_location loc = source_location::current ();
constexpr S (int l, source_location loc = source_location::current ())
- : func(__FUNCTION__), line(l), loc(loc)
+ : func(__PRETTY_FUNCTION__), line(l), loc(loc)
{}
constexpr S (double)
- : func(__FUNCTION__), line(__LINE__)
- // ^ column 38
+ : func(__PRETTY_FUNCTION__), line(__LINE__)
+ // ^ column 45
{}
};
@@ -73,7 +73,7 @@ bar ()
// ^ column 49
const source_location *d[3] = { &a, &b, &c };
const char *file1 = __FILE__;
- const char *function1 = __FUNCTION__;
+ const char *function1 = __PRETTY_FUNCTION__;
for (int j = 0; j < 3; j++)
{
int i= 0;
@@ -104,7 +104,7 @@ bar ()
return false;
if (e.loc.column () != 9)
return false;
- if (f.loc.column () != 38)
+ if (f.loc.column () != 45)
return false;
return true;
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/srcloc17.C b/gcc/testsuite/g++.dg/cpp2a/srcloc17.C
index 16704d0..a02ea48 100644
--- a/gcc/testsuite/g++.dg/cpp2a/srcloc17.C
+++ b/gcc/testsuite/g++.dg/cpp2a/srcloc17.C
@@ -46,12 +46,12 @@ struct S {
source_location loc = source_location::current ();
constexpr S (int l, source_location loc = source_location::current ())
- : func(__FUNCTION__), line(l), loc(loc)
+ : func(__PRETTY_FUNCTION__), line(l), loc(loc)
{}
constexpr S (double)
- : func(__FUNCTION__), line(__LINE__)
- // ^ column 38
+ : func(__PRETTY_FUNCTION__), line(__LINE__)
+ // ^ column 45
{}
};
@@ -76,7 +76,7 @@ bar ()
// ^ column 48
const source_location *d[3] = { &a, &b, &c };
const char *file1 = __FILE__;
- const char *function1 = b.function_name ();
+ const char *function1 = __PRETTY_FUNCTION__;
for (int j = 0; j < 3; j++)
{
int i= 0;
@@ -107,7 +107,7 @@ bar ()
return false;
if (e.loc.column () != 8)
return false;
- if (f.loc.column () != 38)
+ if (f.loc.column () != 45)
return false;
return true;
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/srcloc2.C b/gcc/testsuite/g++.dg/cpp2a/srcloc2.C
index 5ef09bb..4e0b960 100644
--- a/gcc/testsuite/g++.dg/cpp2a/srcloc2.C
+++ b/gcc/testsuite/g++.dg/cpp2a/srcloc2.C
@@ -92,7 +92,7 @@ quux ()
const char *file1 = source_location::current ().file_name ();
const char *file2 = __FILE__;
const char *function1 = source_location::current ().function_name ();
- const char *function2 = __FUNCTION__;
+ const char *function2 = __PRETTY_FUNCTION__;
int line1 = source_location::current ().line ();
int line2 = __LINE__ - 1;
int column