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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

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

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
>From what I can see, the __va_list_tag artificial struct is created the same on
both x86_64-linux and alpha-linux.  Neither is a fully compliant C++
RECORD_TYPE nor its TYPE_DECL in TYPE_NAME, e.g. it doesn't have
DECL_IMPLICIT_TYPEDEF_P bit set (but that is C++ FE specific, so hard to add in
backend created trees), and doesn't have a self-reference inside of
TYPE_FIELDS.
And for both decl_linkage (TYPE_NAME (__va_list_tag_type)) returns lk_internal
for C++11 and later.
The only difference why this isn't a problem on x86_64-linux with modules
(like:
module;
#include <cstdarg>
export module pr124565;
export namespace std {
  using std::va_list;
}
) is that on x86_64-linux va_list is actually __va_list_tag[] ARRAY_TYPE, while
on alpha it is __va_list_tag itself.
Guess we could fix it by setting TREE_PUBLIC (type_decl) = 1; but wonder if it
doesn't break anything else.

Reply via email to