diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-12-04 08:08:39 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-12-04 08:08:39 +0100 |
commit | 9715663f7db7ac57121c9a60dd0078787e274f66 (patch) | |
tree | 6f51f472f041ac4178e04e91980900ff0a49a806 /gcc | |
parent | b8dd0ef74dd799a0a6d35e912239f0819912890f (diff) | |
download | gcc-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.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/srcloc1.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/srcloc15.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/srcloc17.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/srcloc2.C | 2 |
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 |