Skip to content
Snippets Groups Projects
Commit e15ef78e authored by Patrick Palka's avatar Patrick Palka
Browse files

c++/modules: complete_vars ICE with non-exported constexpr var


Here after stream-in of the non-exported constexpr global 'A a' we call
maybe_register_incomplete_var, which we'd expect to be a no-op here but
it manages to take its second branch and pushes {a, NULL_TREE} onto
incomplete_vars.  Later after defining B we ICE from complete_vars due
to this pushed NULL_TREE class context.

Judging by the two commits that introduced/modified this part of
maybe_register_incomplete_var, r196852 and r214333, it seems this second
branch is only concerned with constexpr static data members (whose
initializer may contain a pointer-to-member for a not-yet-complete class)
So this patch restricts this branch accordingly so it's not inadvertently
taken during stream-in.

gcc/cp/ChangeLog:

	* decl.cc (maybe_register_incomplete_var): Restrict second
	branch to static data members from a not-yet-complete class.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/cexpr-4_a.C: New test.
	* g++.dg/modules/cexpr-4_b.C: New test.

Reviewed-by: default avatarJason Merrill <jason@redhat.com>
parent c7607c4c
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment