aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2021-02-17 05:28:09 -0800
committerNathan Sidwell <nathan@acm.org>2021-02-17 05:41:37 -0800
commitd46c7e2c546b26d036856cf570694b832d3b1f54 (patch)
tree9dd6d1ef2e769259684badf235fd4e2ec7cf8760 /gcc
parent06505e701dcfdb1b9855601d6cf0aa1caea62975 (diff)
downloadgcc-d46c7e2c546b26d036856cf570694b832d3b1f54.zip
gcc-d46c7e2c546b26d036856cf570694b832d3b1f54.tar.gz
gcc-d46c7e2c546b26d036856cf570694b832d3b1f54.tar.bz2
c++: ICE with header-units [PR 99071]
This ICE was caused by dereferencing the wrong pointer and not finding the expected thing there. Pointers are like that. PR c++/99071 gcc/cp/ * name-lookup.c (maybe_record_mergeable_decl): Deref the correct pointer. gcc/testsuite/ * g++.dg/modules/pr99071_a.H: New. * g++.dg/modules/pr99071_b.H: New.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/name-lookup.c2
-rw-r--r--gcc/testsuite/g++.dg/modules/pr99071_a.H6
-rw-r--r--gcc/testsuite/g++.dg/modules/pr99071_b.H8
3 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 5aa206d..fda987e 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -3525,7 +3525,7 @@ maybe_record_mergeable_decl (tree *slot, tree name, tree decl)
if (!partition)
{
binding_slot &orig
- = BINDING_VECTOR_CLUSTER (*gslot, 0).slots[BINDING_SLOT_CURRENT];
+ = BINDING_VECTOR_CLUSTER (*slot, 0).slots[BINDING_SLOT_CURRENT];
if (!STAT_HACK_P (tree (orig)))
orig = stat_hack (tree (orig));
diff --git a/gcc/testsuite/g++.dg/modules/pr99071_a.H b/gcc/testsuite/g++.dg/modules/pr99071_a.H
new file mode 100644
index 0000000..44bc7c4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr99071_a.H
@@ -0,0 +1,6 @@
+// PR 99071 ICE with global-module merging
+// { dg-additional-options -fmodule-header }
+// { dg-module-cmi {} }
+
+template<typename T>
+void begin (T *);
diff --git a/gcc/testsuite/g++.dg/modules/pr99071_b.H b/gcc/testsuite/g++.dg/modules/pr99071_b.H
new file mode 100644
index 0000000..1c773d7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr99071_b.H
@@ -0,0 +1,8 @@
+// PR 99071 ICE with global-module merging
+// { dg-additional-options -fmodule-header }
+// { dg-module-cmi {} }
+
+import "pr99071_a.H";
+
+template<typename T>
+void begin(T &);