From: | Zdenek Kotala <Zdenek(dot)Kotala(at)Sun(dot)COM> |
---|---|
To: | Michael Meskes <meskes(at)postgresql(dot)org> |
Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Compiler warning cleanup - unitilized const variables, pointer type mismatch |
Date: | 2009-05-28 14:34:38 |
Message-ID: | 1243521278.22457.13.camel@localhost |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Michael Meskes píše v čt 28. 05. 2009 v 14:47 +0200:
> On Thu, May 28, 2009 at 01:51:07PM +0200, Zdenek Kotala wrote:
> > Problem is with YYLLOC_DEFAULT. When I look on macro definition
> >
> > #define YYLLOC_DEFAULT(Current, Rhs, N) \
> > Current.first_line = Rhs[1].first_line; \
> > Current.first_column = Rhs[1].first_column; \
> > Current.last_line = Rhs[N].last_line; \
> > Current.last_column = Rhs[N].last_column;
> >
> > It seems to me that it is OK, because 1 is used as a index which finally
> > point on yyerror_range[0].
>
> Wait, this is the bison definition. Well to be more precise the bison
> definition in your bison version. Mine is different:
I took it from documentation. I have same as you in generated code.
> # define YYLLOC_DEFAULT(Current, Rhs, N) \
> do \
> if (YYID (N)) \
> { \
> (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
> (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
> (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
> (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
> } \
> else \
> { \
> (Current).first_line = (Current).last_line = \
> YYRHSLOC (Rhs, 0).last_line; \
> (Current).first_column = (Current).last_column = \
> YYRHSLOC (Rhs, 0).last_column; \
> } \
> while (YYID (0))
>
> Having said that, it doesn't really matter as we redefine the macro:
>
> #define YYLLOC_DEFAULT(Current, Rhs, N) \
> do { \
> if (N) \
> (Current) = (Rhs)[1]; \
> else \
> (Current) = (Rhs)[0]; \
> } while (0)
>
> I have to admit that those version look strikingly unsimilar to me. There is no
> reference to Rhs[N] in our macro at all. But then I have no idea whether this
> is needed.
Current is only int. See gramparse.h. I think we could rewrite it this
way:
#define YYLLOC_DEFAULT(Current, Rhs, N) \
do { \
if (N) \
(Current) = (Rhs)[1]; \
else \
(Current) = (Rhs)[N]; \
} while (0)
It is same result and compiler is quite.
Zdenek
From | Date | Subject | |
---|---|---|---|
Next Message | Kevin Grittner | 2009-05-28 14:40:01 | Re: User-facing aspects of serializable transactions |
Previous Message | Heikki Linnakangas | 2009-05-28 14:21:42 | Re: Clean shutdown and warm standby |