c++ modules: ICE with bitfield in class template
According to grokbitfield, DECL_BIT_FIELD_REPRESENTATIVE contains the width of the bitfield until we layout the class type (after which it'll contain a decl). Thus for a bitfield in a class template it'll always be the width, and this patch makes us avoid ICEing from mark_class_def in this case. gcc/cp/ChangeLog: * module.cc (trees_out::mark_class_def): Guard against DECL_BIT_FIELD_REPRESENTATIVE not being a decl. gcc/testsuite/ChangeLog: * g++.dg/modules/bfield-3.H: New test.
This commit is contained in:
parent
f8ba88b6a8
commit
f7f4628054
2 changed files with 13 additions and 1 deletions
|
@ -11919,7 +11919,11 @@ trees_out::mark_class_def (tree defn)
|
|||
mark_class_member (member);
|
||||
if (TREE_CODE (member) == FIELD_DECL)
|
||||
if (tree repr = DECL_BIT_FIELD_REPRESENTATIVE (member))
|
||||
mark_declaration (repr, false);
|
||||
/* If we're marking a class template definition, then
|
||||
this'll contain the width (as set by grokbitfield)
|
||||
instead of a decl. */
|
||||
if (DECL_P (repr))
|
||||
mark_declaration (repr, false);
|
||||
}
|
||||
|
||||
/* Mark the binfo hierarchy. */
|
||||
|
|
8
gcc/testsuite/g++.dg/modules/bfield-3.H
Normal file
8
gcc/testsuite/g++.dg/modules/bfield-3.H
Normal file
|
@ -0,0 +1,8 @@
|
|||
// { dg-additional-options -fmodule-header }
|
||||
// { dg-module-cmi {} }
|
||||
|
||||
template<int N>
|
||||
struct A {
|
||||
int x : 1;
|
||||
int y : N;
|
||||
};
|
Loading…
Add table
Reference in a new issue