Bug 6774 - printf("%lld") prints bad values
Summary: printf("%lld") prints bad values
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: unknown
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-05-22 17:46 UTC by brian
Modified: 2003-07-25 17:33 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description brian 2002-05-22 17:46:00 UTC
# include <stdio.h>

int main(int c, char *argv[])
{
   long long   i;
   long long   n;

   for (i=0LL; i<63LL; i++)
      {
      n = 1LL << i;
      printf("1 << %d = %lld\n", i, n);
      }

   return 0;

}


%lld is giving 64 bit results for i < 32 and 0 for i >= 32.

Release:
g++ or g++3

Environment:
Red Hat Linux on Intel
Mandrake Linux on Intel

How-To-Repeat:
Execute above program.
Comment 1 brian 2002-05-22 17:46:00 UTC
Fix:
None that I can see.   Is 64-bit integer formatting supported by g++ compilers?  Doesn't seem so.
Comment 2 Richard Henderson 2002-05-22 23:42:06 UTC
State-Changed-From-To: open->closed
State-Changed-Why: Buggy test case.  You have a typo in your printf format.
    Should be "1 << %lld = %lld".  Using -Wall would have 
    pointed this out:
    
    z.c: In function `main':
    z.c:11: warning: int format, different type arg (arg 2)
Comment 3 brian 2002-05-23 08:46:17 UTC
From: "Brian Ceccarelli" <brian@talusmusic.com>
To: <rth@gcc.gnu.org>,
	<brian@talusmusic.com>,
	<gcc-bugs@gcc.gnu.org>,
	<gcc-prs@gcc.gnu.org>,
	<nobody@gcc.gnu.org>,
	<gcc-gnats@gcc.gnu.org>
Cc:  
Subject: RE: c++/6774: printf("%lld") prints bad values
Date: Thu, 23 May 2002 08:46:17 -0400

 Thank you.  I didn't think the previous %d would matter.  'i 'was printing
 fine.  I was interested in 'n'.    Just learned something.
 
 This test case wasn't exactly the problem I was having.   I must have a
 different problem in my program.    Thanks . . . and I am sorry for
 bothering you.
 
 
 Brian
 
 
 -----Original Message-----
 From: rth@gcc.gnu.org [mailto:rth@gcc.gnu.org]
 Sent: Thursday, May 23, 2002 2:42 AM
 To: brian@talusmusic.com; gcc-bugs@gcc.gnu.org; gcc-prs@gcc.gnu.org;
 nobody@gcc.gnu.org
 Subject: Re: c++/6774: printf("%lld") prints bad values
 
 
 Synopsis: printf("%lld") prints bad values
 
 State-Changed-From-To: open->closed
 State-Changed-By: rth
 State-Changed-When: Wed May 22 23:42:06 2002
 State-Changed-Why:
     Buggy test case.  You have a typo in your printf format.
     Should be "1 << %lld = %lld".  Using -Wall would have
     pointed this out:
 
     z.c: In function `main':
     z.c:11: warning: int format, different type arg (arg 2)
 
 
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p
 r=6774
 

Comment 4 Richard Henderson 2002-05-23 09:17:08 UTC
From: Richard Henderson <rth@redhat.com>
To: Brian Ceccarelli <brian@talusmusic.com>
Cc: rth@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org,
   nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Subject: Re: c++/6774: printf("%lld") prints bad values
Date: Thu, 23 May 2002 09:17:08 -0700

 On Thu, May 23, 2002 at 10:58:12AM -0400, Brian Ceccarelli wrote:
 >    Do you want me to file a separate bug report on this?
 
 No, since this almost certainly isn't going to be a compiler bug.
 
 
 r~
Comment 5 brian 2002-05-23 10:58:12 UTC
From: "Brian Ceccarelli" <brian@talusmusic.com>
To: <rth@gcc.gnu.org>,
	<brian@talusmusic.com>,
	<gcc-bugs@gcc.gnu.org>,
	<gcc-prs@gcc.gnu.org>,
	<nobody@gcc.gnu.org>,
	<gcc-gnats@gcc.gnu.org>
Cc:  
Subject: RE: c++/6774: printf("%lld") prints bad values
Date: Thu, 23 May 2002 10:58:12 -0400

 I think I now discovered the real problem.
 
      pthread_t     id;
 
      status = pthread_create(&id, ...)
 
   The first call to pthread_create returns a valid thread ID 'id' argument.
 Subsequent pthread_create calls return 0 for id.   'status' is 0 in each
 case indicating successful thread creation.  (My multithreaded program works
 fine with the exception of that thread id.)
 
    I use a C++ object for each thread.  I was setting my object's ID
 attribute to the 'id' argument returned by pthread_create.   This works for
 the first thread I create, but not for subsequent threads.
 
    When I was printing out the thread_id, (which I later cast to long long),
 I was using "%lld".   So I thought %lld was the problem.  Since that wasn't
 the problem, I think the problem is with pthread_create.
 
    pthread_self() always returns the correct ID.    I now use this function
 everytime I need the thread-id.
 
    Do you want me to file a separate bug report on this?     Or am I going
 nuts again?   :)    I am on Red Hat Linux on an Intel platform.   Same thing
 happens on Mandrake Linux on Intel.
 
 
 
 Brian
 brian@talusmusic.com
 
 
 
 
 -----Original Message-----
 From: rth@gcc.gnu.org [mailto:rth@gcc.gnu.org]
 Sent: Thursday, May 23, 2002 2:42 AM
 To: brian@talusmusic.com; gcc-bugs@gcc.gnu.org; gcc-prs@gcc.gnu.org;
 nobody@gcc.gnu.org
 Subject: Re: c++/6774: printf("%lld") prints bad values
 
 
 Synopsis: printf("%lld") prints bad values
 
 State-Changed-From-To: open->closed
 State-Changed-By: rth
 State-Changed-When: Wed May 22 23:42:06 2002
 State-Changed-Why:
     Buggy test case.  You have a typo in your printf format.
     Should be "1 << %lld = %lld".  Using -Wall would have
     pointed this out:
 
     z.c: In function `main':
     z.c:11: warning: int format, different type arg (arg 2)
 
 
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p
 r=6774