gjavah.c (is_first_data_member): New global variable.

2003-03-04  Andrew Haley  <aph@redhat.com>

        * gjavah.c (is_first_data_member): New global variable.
        (print_c_decl): If it's the first data member, align it as the
        superclass.
        (process_file): Set is_first_data_member.

From-SVN: r64247
This commit is contained in:
Andrew Haley 2003-03-12 16:14:01 +00:00 committed by Andrew Haley
parent 0a8e3de3c8
commit 68566610af
2 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2003-03-04 Andrew Haley <aph@redhat.com>
* gjavah.c (is_first_data_member): New global variable.
(print_c_decl): If it's the first data member, align it as the
superclass.
(process_file): Set is_first_data_member.
2003-03-11 Tom Tromey <tromey@redhat.com>
* parse.y (resolve_field_access): Initialize class if field is

View File

@ -197,6 +197,9 @@ static int method_printed = 0;
static int method_synthetic = 0;
static int method_signature = 0;
/* Set to 1 while the very first data member of a class is being handled. */
static int is_first_data_member = 0;
#define HANDLE_METHOD(ACCESS_FLAGS, NAME, SIGNATURE, ATTRIBUTE_COUNT) \
{ \
method_synthetic = 0; \
@ -1383,6 +1386,17 @@ print_c_decl (FILE* stream, JCF* jcf, int name_index, int signature_index,
}
}
/* Force the alignment of the first data member. This is
because the "new" C++ ABI changed the alignemnt of non-POD
classes. gcj, however, still uses the "old" alignment. */
if (is_first_data_member && ! (flags & ACC_STATIC) && ! is_method)
{
is_first_data_member = 0;
print_cxx_classname (out, " __attribute__((aligned(__alignof__( ",
jcf, jcf->super_class, 1);
fputs (" )))) ", stream);
}
/* Now print the name of the thing. */
if (need_space)
fputs (" ", stream);
@ -2088,6 +2102,8 @@ process_file (JCF *jcf, FILE *out)
}
/* Now go back for second pass over methods and fields. */
is_first_data_member = 1;
JCF_SEEK (jcf, method_start);
method_pass = 1;
jcf_parse_methods (jcf);