Re: volatile markings to silence compilers

From: Martijn van Oosterhout <kleptog(at)svana(dot)org>
To: Bruce Momjian <bruce(at)momjian(dot)us>
Cc: PostgreSQL-development <pgsql-hackers(at)postgreSQL(dot)org>
Subject: Re: volatile markings to silence compilers
Date: 2011-03-17 08:17:38
Message-ID: 20110317081737.GB23139@svana.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Mar 17, 2011 at 12:36:59AM -0400, Bruce Momjian wrote:
> Looking over the release notes, we have added a few 'volatile' storage
> specifications to variables which are near longjump/TRY blocks to
> silence compilers. I am worried that these specifications don't clearly
> identify their purpose. Can we rename these to use a macro for
> 'volatile' that will make their purpose clearer and perhaps their
> removal one day easier?

The question is, are they wrong? The longjmp manpage says:

The values of automatic variables are unspecified after a call
to longjmp() if they meet all the following criteria:

· they are local to the function that made the corresponding
setjmp(3) call;

· their values are changed between the calls to setjmp(3) and
longjmp(); and

· they are not declared as volatile.

It appears the issue is mostly that the compiler is unable to prove
that the variables aren't changed. It's hard because the buffer created
by setjmp() doesn't expire. We know that after PG_END_TRY() the buffer
won't be used, but apparently the compiler doesn't.

My point is, are we hopeful this problem will ever go away?

Have a nice day,
--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> Patriotism is when love of your own people comes first; nationalism,
> when hate for people other than your own comes first.
> - Charles de Gaulle

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jesper Krogh 2011-03-17 08:17:39 Re: really lazy vacuums?
Previous Message Fujii Masao 2011-03-17 06:47:18 Re: Re: [COMMITTERS] pgsql: Basic Recovery Control functions for use in Hot Standby. Pause,