public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/40003]  New: apparent spurious uninitialized read from r147052 on integer code
@ 2009-05-02  5:46 regehr at cs dot utah dot edu
  2009-05-02  5:47 ` [Bug c/40003] " regehr at cs dot utah dot edu
  2010-03-28 19:34 ` [Bug middle-end/40003] " regehr at cs dot utah dot edu
  0 siblings, 2 replies; 3+ messages in thread
From: regehr at cs dot utah dot edu @ 2009-05-02  5:46 UTC (permalink / raw)
  To: gcc-bugs

See below.  The output at -O0 looks good.  At -O3 the wrong result is printed
and valgrind reports a read of uninitialized memory.

regehr@john-home:~/volatile/tmp160$ current-gcc -O0 -Wall small.c -o small
regehr@john-home:~/volatile/tmp160$ valgrind ./small
==26152== Memcheck, a memory error detector.
==26152== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==26152== Using LibVEX rev 1804, a library for dynamic binary translation.
==26152== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==26152== Using valgrind-3.3.0, a dynamic binary instrumentation framework.
==26152== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==26152== For more details, rerun with: -v
==26152== 
checksum = 0
==26152== 
==26152== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 1)
==26152== malloc/free: in use at exit: 0 bytes in 0 blocks.
==26152== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==26152== For counts of detected errors, rerun with: -v
==26152== All heap blocks were freed -- no leaks are possible.
regehr@john-home:~/volatile/tmp160$ current-gcc -O3 -Wall small.c -o small
regehr@john-home:~/volatile/tmp160$ valgrind ./small
==26158== Memcheck, a memory error detector.
==26158== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==26158== Using LibVEX rev 1804, a library for dynamic binary translation.
==26158== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==26158== Using valgrind-3.3.0, a dynamic binary instrumentation framework.
==26158== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==26158== For more details, rerun with: -v
==26158== 
==26158== Use of uninitialised value of size 4
==26158==    at 0x8048553: main (in /home/regehr/volatile/tmp160/small)
checksum = E9
==26158== 
==26158== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 1)
==26158== malloc/free: in use at exit: 0 bytes in 0 blocks.
==26158== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==26158== For counts of detected errors, rerun with: -v
==26158== All heap blocks were freed -- no leaks are possible.
regehr@john-home:~/volatile/tmp160$ current-gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure --prefix=/home/regehr/z/tmp/gcc-r147052-install
--program-prefix=r147052- --enable-languages=c,c++
Thread model: posix
gcc version 4.5.0 20090502 (experimental) (GCC) 
regehr@john-home:~/volatile/tmp160$ cat small.c
#include <stdint.h>
#include <stdio.h>

uint8_t crc32_tab[256];
uint32_t crc32_context;

#define safe_mod_macro_int16_t_s_s(si1,si2) \
  (((((int16_t)(si2)) == ((int16_t)0)) || ((((int16_t)(si1)) == (INT16_MIN)) &&
(((int16_t)(si2)) == ((int16_t)-1)))) \
  ? ((int16_t)(si1)) \
  : (((int16_t)(si1)) % ((int16_t)(si2))))

static int16_t
safe_mod_func_int16_t_s_s (int16_t _si1, int16_t _si2)
{
  return safe_mod_macro_int16_t_s_s(_si1,_si2);
}

#define safe_mod_macro_int64_t_s_s(si1,si2) \
  (((((int64_t)(si2)) == ((int64_t)0)) || ((((int64_t)(si1)) == (INT64_MIN)) &&
(((int64_t)(si2)) == ((int64_t)-1)))) \
  ? ((int64_t)(si1)) \
  : (((int64_t)(si1)) % ((int64_t)(si2))))

static int64_t
safe_mod_func_int64_t_s_s (int64_t _si1, int64_t _si2)
{
  return safe_mod_macro_int64_t_s_s(_si1,_si2);
}

static void 
crc32_gentab (void)
{
        uint32_t crc;
        const uint32_t poly = 0xEDB88320UL;
        int i, j;

        for (i = 0; i < 256; i++) {
                crc = i;
                for (j = 8; j > 0; j--) {
                        if (crc & 1) {
                                crc = (crc >> 1) ^ poly;
                        } else {
                                crc >>= 1;
                        }
                }
                crc32_tab[i] = crc;
        }
}

static void 
crc32_byte (uint8_t b) {
        crc32_context = 
                ((crc32_context >> 8) & 0x00FFFFFF) ^ 
                crc32_tab[(crc32_context ^ b) & 0xFF];
}

static void 
crc32_8bytes (uint64_t val)
{
        crc32_byte ((val>>0) & 0xff);
        crc32_byte ((val>>8) & 0xff);
        crc32_byte ((val>>16) & 0xff);
        crc32_byte ((val>>24) & 0xff);
        crc32_byte ((val>>32) & 0xff);
        crc32_byte ((val>>40) & 0xff);
        crc32_byte ((val>>48) & 0xff);
        crc32_byte ((val>>56) & 0xff);
}

static inline void
platform_main_end(uint32_t crc)
{
        printf ("checksum = %X\n", crc);
}

int8_t g_3 = 1;
volatile uint8_t g_98;
uint8_t g_99;

int32_t func_10 (int32_t p_11);
int32_t func_10 (int32_t p_11)
{
  return g_99;
}

int64_t func_4 (void);
int64_t func_4 (void)
{
  if (safe_mod_func_int16_t_s_s
      (((safe_mod_func_int64_t_s_s (1, g_3)) == g_3), func_10 (1)))
    g_98;
  else
    return g_98;
  return 1;
}

int main (void)
{
  crc32_gentab ();
  func_4 ();
  crc32_8bytes (g_99);
  platform_main_end (crc32_context);
  return 0;
}


-- 
           Summary: apparent spurious uninitialized read from r147052 on
                    integer code
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: regehr at cs dot utah dot edu
 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=40003


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug c/40003] apparent spurious uninitialized read from r147052 on integer code
  2009-05-02  5:46 [Bug c/40003] New: apparent spurious uninitialized read from r147052 on integer code regehr at cs dot utah dot edu
@ 2009-05-02  5:47 ` regehr at cs dot utah dot edu
  2010-03-28 19:34 ` [Bug middle-end/40003] " regehr at cs dot utah dot edu
  1 sibling, 0 replies; 3+ messages in thread
From: regehr at cs dot utah dot edu @ 2009-05-02  5:47 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from regehr at cs dot utah dot edu  2009-05-02 05:47 -------
Created an attachment (id=17790)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17790&action=view)
preprocessed failure-inducing input


-- 


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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug middle-end/40003] apparent spurious uninitialized read from r147052 on integer code
  2009-05-02  5:46 [Bug c/40003] New: apparent spurious uninitialized read from r147052 on integer code regehr at cs dot utah dot edu
  2009-05-02  5:47 ` [Bug c/40003] " regehr at cs dot utah dot edu
@ 2010-03-28 19:34 ` regehr at cs dot utah dot edu
  1 sibling, 0 replies; 3+ messages in thread
From: regehr at cs dot utah dot edu @ 2010-03-28 19:34 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from regehr at cs dot utah dot edu  2010-03-28 19:34 -------
I no longer see this behavior.


-- 

regehr at cs dot utah dot edu changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |WORKSFORME


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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-03-28 19:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-05-02  5:46 [Bug c/40003] New: apparent spurious uninitialized read from r147052 on integer code regehr at cs dot utah dot edu
2009-05-02  5:47 ` [Bug c/40003] " regehr at cs dot utah dot edu
2010-03-28 19:34 ` [Bug middle-end/40003] " regehr at cs dot utah dot edu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).