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.
This commit is contained in:
Nathan Sidwell 2021-02-17 05:28:09 -08:00
parent 06505e701d
commit d46c7e2c54
3 changed files with 15 additions and 1 deletions

View File

@ -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));

View File

@ -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 *);

View File

@ -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 &);