diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-12-18 10:07:28 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-12-18 10:07:28 +0100 |
commit | 11f07ef37786d10517121fc6226681cd1aa2aea2 (patch) | |
tree | cdf6ad4b261816eef3ac38f2f65ddc3011c7f429 /gcc/testsuite | |
parent | dc00689332f023d959a8e9f01368f59b756a7017 (diff) | |
download | gcc-11f07ef37786d10517121fc6226681cd1aa2aea2.zip gcc-11f07ef37786d10517121fc6226681cd1aa2aea2.tar.gz gcc-11f07ef37786d10517121fc6226681cd1aa2aea2.tar.bz2 |
c++: Fix PCH ICE with __builtin_source_location [PR98343]
Seems the ggc_remove ppc_nx 3 operand member relies on the hash tables to
contain pointers in the first element, which is not the case for
source_location_table* hash table, which has location_t and unsigned as
first two members and pointer somewhere else.
I've tried to change:
static void
pch_nx (T &p, gt_pointer_operator op, void *cookie)
{
- op (&p, cookie);
+ extern void gt_pch_nx (T *, gt_pointer_operator, void *);
+ gt_pch_nx (&p, op, cookie);
}
in hash-traits.h, but that failed miserably.
So, this patch instead overrides the two pch_nx overloads (only the second
one is needed, the former one is identical to the ggc_remove one) but I need
to override both.
2020-12-18 Jakub Jelinek <jakub@redhat.com>
PR c++/98343
* cp-gimplify.c (source_location_table_entry_hash::pch_nx): Override
static member functions from ggc_remove.
* g++.dg/pch/pr98343.C: New test.
* g++.dg/pch/pr98343.Hs: New file.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/g++.dg/pch/pr98343.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pch/pr98343.Hs | 18 |
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/pch/pr98343.C b/gcc/testsuite/g++.dg/pch/pr98343.C new file mode 100644 index 0000000..095a4f1 --- /dev/null +++ b/gcc/testsuite/g++.dg/pch/pr98343.C @@ -0,0 +1,6 @@ +// PR c++/98343 +// { dg-options "-std=c++2a" } + +#include "pr98343.H" + +const void *ptr2 = __builtin_source_location (); diff --git a/gcc/testsuite/g++.dg/pch/pr98343.Hs b/gcc/testsuite/g++.dg/pch/pr98343.Hs new file mode 100644 index 0000000..33c8542 --- /dev/null +++ b/gcc/testsuite/g++.dg/pch/pr98343.Hs @@ -0,0 +1,18 @@ +// PR c++/98343 +// { dg-options "-std=c++2a" } + +namespace std +{ + struct source_location + { + struct __impl + { + const char* _M_file_name; + const char* _M_function_name; + unsigned _M_line; + unsigned _M_column; + }; + const __impl* _M_impl; + }; +} +const void *ptr = __builtin_source_location (); |