This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Question on PR26890, possible regression.
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Jerry DeLisle <jvdelisle at verizon dot net>
- Cc: gcc-patches at gcc dot gnu dot org, Fortran List <fortran at gcc dot gnu dot org>
- Date: Mon, 10 Apr 2006 08:58:38 -0400
- Subject: Re: Question on PR26890, possible regression.
- References: <20060407142729.GC16307@devserv.devel.redhat.com> <4436B5DD.9090108@verizon.net> <20060407193722.GE16307@devserv.devel.redhat.com> <4436DD2A.5060202@verizon.net>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Apr 07, 2006 at 02:44:10PM -0700, Jerry DeLisle wrote:
> Thanks for the explanation. I will commit the fix to put pad back where it
> belongs shortly under the obvious rule. I will also had a note explaining
> this connection back to the frontend. I will check the size of the pad
> relative to the size of the other union to see where we stand.
What you committed is not what I was looking for.
u.pad really should be equal to what trans-io.c has compiled in and u.p
should be smaller or equal to u.pad.
Ok for HEAD (and similar change for gcc-4_1-branch)?
2006-04-10 Jakub Jelinek <jakub@redhat.com>
* io/io.h (st_parameter_dt): Revert 2005-12-10 change to
u.pad, fix comment.
(check_st_parameter_dt): New compile time assert.
--- libgfortran/io/io.h.jj 2006-04-10 14:00:31.000000000 +0200
+++ libgfortran/io/io.h 2006-04-10 14:11:24.000000000 +0200
@@ -436,13 +436,19 @@ typedef struct st_parameter_dt
char value[32];
gfc_offset size_used;
} p;
- /* This pad size must be greater than or equal to the pad_size declared in
- trans-io.c (gfc_build_io_library_fndecls) */
- char pad[16 * sizeof (char *) + 34 * sizeof (int)];
+ /* This pad size must be equal to the pad_size declared in
+ trans-io.c (gfc_build_io_library_fndecls). The above structure
+ must be smaller or equal to this array. */
+ char pad[16 * sizeof (char *) + 32 * sizeof (int)];
} u;
}
st_parameter_dt;
+/* Ensure st_parameter_dt's u.pad is bigger or equal to u.p. */
+extern char check_st_parameter_dt[sizeof (((st_parameter_dt *) 0)->u.pad)
+ >= sizeof (((st_parameter_dt *) 0)->u.p)
+ ? 1 : -1];
+
#undef CHARACTER1
#undef CHARACTER2
Jakub