This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/55584] New: __sync_fetch_and_* friends do not issue warnings when CPU does not support them natively


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55584

             Bug #: 55584
           Summary: __sync_fetch_and_* friends do not issue warnings when
                    CPU does not support them natively
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: trivial
          Priority: P3
         Component: c
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: rsaxvc@gmail.com


Section 6.5.1 of the GCC 4.7.2 manual states:
    "Not all operations are supported by all target processors.
    If a particular operation cannot be implemented on the target
    processor, a warning will be generated and a call an external
    function will be generated. ..."
    -http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc.pdf

However, I cannot get this warning to be generated. I added -Wall and -Wextra.
I opened the vanilla source code for 4.7.2, but the only related warning I
could find was -Wsync-nand ( which warns about how the __sync*nand* functions
changed their meanings with 4.4 ).

The command line is:
gcc test_sync_on_old_platforms.c -c -W -Wall -Wextra -m32 -march=i386
And it returns without error and emits a valid .o file. If I add the '-S' flag
to GCC, the output assembly lists a call to __sync_fetch_and_add_4, as the i386
does not support atomic operations. This much is correct, but it would be good
to warn when this is happening.


The platform is:
rsaxvc@slashtop:~/code$ gcc --version
gcc (Debian 4.7.2-4) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rsaxvc@slashtop:~/code/gccbug$ uname -a
Linux slashtop 3.2.0-4-amd64 #1 SMP Debian 3.2.32-1 x86_64 GNU/Linux
rsaxvc@slashtop:~/code$ 

Similar behaviour is seen on OpenBSD/Sparc32.

Here is the input code:
rsaxvc@slashtop:~/code$ cat test_sync_on_old_platforms.c 
static unsigned int the_count;

unsigned int test_sync_increment( void )
{
return __sync_fetch_and_add( &the_count, 1 );
}
rsaxvc@slashtop:~/code$


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]