c/9700: va_start gets __offset wrong in some situations
Aron Griffis
agriffis@gentoo.org
Sat Feb 15 02:21:00 GMT 2003
bangerth@dealii.org wrote:[Fri Feb 14 2003, 09:10:12PM EST]
> Admittedly I only looked at the program given in the first
> report. So, let me ask again: I think that that program
> does exactly what should be expected, is this right? If so,
> the comment in that program about expectations is wrong.
Ah, this is where we're not communicating. The comment is accurate. I
can rephrase it as follows, perhaps this is more clear:
/*
* This is the first invocation of va_arg. The argument list is as
* follows:
*
* a = 0
* b = 0
* c = 0
* d = 0
* e = 0
* ap = { undef, undef }
* first_custom = "one"
* ... = "two", "three"
*
* Therefore va_arg should return "two". However in this example it
* erroneously returns "one", which is first_custom.
*/
> Second question: if the program in the first report doesn't
> show the problem at all, is it demonstrated in the second?
> If so, I'll be happy to take a look at that one on Monday.
It is demonstrated in both, but most clearly in the second, where __base
is clearly pointing 8-bytes prior to the correct location. It seems
like the alignment of __base in the single instance is being corrected
downward instead of upward.
Note you will need an Alpha to build the second example program since
the definition of va_list is different on x86. However it might not be
necessary since I've posted the output.
Aron
More information about the Gcc-bugs
mailing list