Disable optimizations on one function (was: 'pragma optimize' ...)
Closed, ResolvedPublic

Description

Hi Gentleman,

Re: Issue 1878.

Below is a new definition of volatile. Andrew also provides advice,
and it might help GnuPG put the issue to bed once and for all.
Personally, I like asm volatile("": : : "memory");.

(I'm not sure what to do when Ian and Andrew don't exactly sync, though).

Jeff

  • Forwarded message ----------

From: Jeffrey Walton <noloader@gmail.com>
Date: Thu, Jul 16, 2015 at 5:40 AM
Subject: Re: Disable optimizations on one function (was: 'pragma optimize' ...)
To: Andrew Haley <aph@redhat.com>
Cc: "gcc-help@gcc.gnu.org" <gcc-help@gcc.gnu.org>

Many folks try and cast ptr to volatile, but that's an abuse because
GCC considers volatile something for memory mapped hardware. Volatile
should not be used in an attempt to tame the optimizer.

GCC does not consider volatile to be something for memory mapped
hardware.

OK, this appears to be creating a moving definition (or the definition
has changed since I took note of it). I took the last definition from
Ian Lance Taylor. See http://www.airs.com/blog/archives/154 and, for
example, https://gcc.gnu.org/ml/gcc-help/2012-03/msg00257.html.

...
If you don't mind being nonportable, a memoryclobber should do it:

memset(ptr, 0x00, n);
asm volatile("": : : "memory");

or even:

memset(ptr, 0x00, n);
__atomic_thread_fence(__ATOMIC_RELAXED);

Perfect, thanks.

Jeff

neal triaged this task as Normal priority.

Thanks for researching this. We'll take a look at this soon. I'm confused
about whey you didn't just add this to T1878. Is this a separate issue?
Thanks.

werner closed this task as Resolved.Jul 22 2015, 4:35 PM
werner claimed this task.

See T1878.