From: Nathan Sidwell Date: Wed, 17 Feb 2021 13:28:09 +0000 (-0800) Subject: c++: ICE with header-units [PR 99071] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d46c7e2c546b26d036856cf570694b832d3b1f54;p=gcc.git 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. --- diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 5aa206d40d4..fda987e9616 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 00000000000..44bc7c43601 --- /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 +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 00000000000..1c773d74f12 --- /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 +void begin(T &);