This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/29753] New: Volatile semantics ignored in some cases
- From: "ricardo dot fernandez at st dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 7 Nov 2006 17:14:51 -0000
- Subject: [Bug c/29753] New: Volatile semantics ignored in some cases
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following function:
static struct { int w; } s;
void wait (void) {
int t;
loop:
t = *((volatile int *) &s.w);
if (t > 0) goto loop;
}
is compiled incorrectly with "gcc -v -O3 v.c -o v.s -Wall -S". The generated
assembly does not respetc the semantics of volatile:
wait:
movl s, %eax
pushl %ebp
movl %esp, %ebp
testl %eax, %eax
jg .L6
popl %ebp
ret
.L3:
.L6:
jmp .L6
The attached testscase shows the problem. It also includes a similar function
which does get compiled correctly, the only difference is that it introduces a
temporary variable.
Detailed compiled output:
/home/ricardo/mine/install/bin/gcc -v -O3 v.c -o v.s -Wall -S
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure --prefix=/home/ricardo/mine/install/
--enable-ckecking=all --enable-languages=c,cil --disable-bootstrap :
(reconfigured) ../configure --prefix=/home/ricardo/mine/install/
--enable-languages=c,cil --disable-bootstrap
Thread model: posix
gcc version 4.2.0 20060826 (experimental)
/home/ricardo/mine/install/bin/../libexec/gcc/i686-pc-linux-gnu/4.2.0/cc1
-quiet -v -iprefix
/home/ricardo/mine/install/bin/../lib/gcc/i686-pc-linux-gnu/4.2.0/ v.c -quiet
-dumpbase v.c -mtune=generic -auxbase-strip v.s -O3 -Wall -version -o v.s
ignoring nonexistent directory
"/home/ricardo/mine/install/bin/../lib/gcc/i686-pc-linux-gnu/4.2.0/../../../../i686-pc-linux-gnu/include"
ignoring duplicate directory
"/home/ricardo/mine/install//lib/gcc/i686-pc-linux-gnu/4.2.0/include"
ignoring nonexistent directory
"/home/ricardo/mine/install//lib/gcc/i686-pc-linux-gnu/4.2.0/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/ricardo/mine/install/bin/../lib/gcc/i686-pc-linux-gnu/4.2.0/include
/usr/local/include
/home/ricardo/mine/install//include
/usr/include
End of search list.
GNU C version 4.2.0 20060826 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 4.1.2 20061020 (prerelease) (Debian
4.1.1-17).
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 39ae1c561861def994882f2081f65beb
--
Summary: Volatile semantics ignored in some cases
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ricardo dot fernandez at st dot com
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29753