This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug debug/66068] [6 Regression] error: type variant has different TYPE_VFIELD


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66068

Jim Wilson <wilson at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |wilson at gcc dot gnu.org

--- Comment #6 from Jim Wilson <wilson at gcc dot gnu.org> ---
The problem is in c_build_qualified_type.  It calls build_qualified_type at the
end which copies every field to create a new type, including TYPE_VFIELD.  But
this is wrong, as TYPE_VFIELD is set in the main variant type, but should not
be set in the qualified type.  To fix this, I would suggest storing the result
of build_qualify_type in a local var, and then clearing C_TYPE_INCOMPLETE_VARS
(aka TYPE_VFIELD) if this is a struct or union type.

An alternative solution would be to clear TYPE_VFIELD somewhere lower down,
such as in build_distinct_type_copy, but that would affect every front end, so
it isn't obvious if this is safe.  Fixing the problem in the C front end is
clearly a safer solution.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]