public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/30047]  New: Corrupt return value in specific context
@ 2006-12-02  7:29 spam at david dot osborn dot name
  2008-06-08 19:56 ` [Bug target/30047] " gcc at david dot osborn dot name
  2008-06-08 20:02 ` gcc at david dot osborn dot name
  0 siblings, 2 replies; 4+ messages in thread
From: spam at david dot osborn dot name @ 2006-12-02  7:29 UTC (permalink / raw)
  To: gcc-bugs

The following code prints an incorrect return value from F.

#include <iostream>
#include <vector>

int F()
{

        std::vector<char> buffer; // this can be any container
        std::cout << std::endl;
        return 12345;
        std::cout << std::endl;
}

int main()
{
        std::cout << F() << std::endl; // prints something other than 12345
}

If any of the lines in F are rearranged, the bug goes away.  I did a fresh
rebuild of GCC 4.1.1 under MinGW and bug remained.  Before the rebuild, the
return value was somewhat random, as if it were accessing invalid memory. 
Since the rebuild, the return value has been a steady 0.

Compiled with:
$ g++ -oprog prog.cpp && prog


-- 
           Summary: Corrupt return value in specific context
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: spam at david dot osborn dot name
 GCC build triplet: i686-pc-mingw32
  GCC host triplet: i686-pc-mingw32
GCC target triplet: i686-pc-mingw32


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


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

* [Bug target/30047] Corrupt return value in specific context
  2006-12-02  7:29 [Bug libstdc++/30047] New: Corrupt return value in specific context spam at david dot osborn dot name
@ 2008-06-08 19:56 ` gcc at david dot osborn dot name
  2008-06-08 20:02 ` gcc at david dot osborn dot name
  1 sibling, 0 replies; 4+ messages in thread
From: gcc at david dot osborn dot name @ 2008-06-08 19:56 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from gcc at david dot osborn dot name  2008-06-08 19:55 -------
Created an attachment (id=15736)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=15736&action=view)
reduced testcase

This bug still exists in GCC 4.3.1.  I've narrowed it down to line 183 in
bits/basic_ios.tcc where it says:

extern template class basic_ios<char>;

If you comment out this line, the code produces the correct result (12345). 
Otherwise it produced zero consistently.  The attached testcase leaves a lot
out of the iostream classes, so it may be technically invalid.  But it yields
that same results as the previous testcase, as well as with respect to the
"extern template" line.

Also, the std::vector in the original testcase can be replaced by an empty
class with an explicit destructor.


-- 


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


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

* [Bug target/30047] Corrupt return value in specific context
  2006-12-02  7:29 [Bug libstdc++/30047] New: Corrupt return value in specific context spam at david dot osborn dot name
  2008-06-08 19:56 ` [Bug target/30047] " gcc at david dot osborn dot name
@ 2008-06-08 20:02 ` gcc at david dot osborn dot name
  1 sibling, 0 replies; 4+ messages in thread
From: gcc at david dot osborn dot name @ 2008-06-08 20:02 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from gcc at david dot osborn dot name  2008-06-08 20:01 -------
Created an attachment (id=15738)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=15738&action=view)
compiler output

This shows bad code being generated.  The return value (12345) gets pushed into
eax on line 77, and then is subsequently overwritten for a call to
__Unwind_SjLj_Unregister.  Line 85 was added by me to show how to recover the
return value.


-- 


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


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

* [Bug target/30047] Corrupt return value in specific context
       [not found] <bug-30047-4@http.gcc.gnu.org/bugzilla/>
@ 2011-04-12 19:44 ` ktietz at gcc dot gnu.org
  0 siblings, 0 replies; 4+ messages in thread
From: ktietz at gcc dot gnu.org @ 2011-04-12 19:44 UTC (permalink / raw)
  To: gcc-bugs

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

Kai Tietz <ktietz at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                 CC|                            |ktietz at gcc dot gnu.org
         Resolution|                            |DUPLICATE

--- Comment #3 from Kai Tietz <ktietz at gcc dot gnu.org> 2011-04-12 19:44:10 UTC ---
Dup of 47490

*** This bug has been marked as a duplicate of bug 47490 ***


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

end of thread, other threads:[~2011-04-12 19:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-12-02  7:29 [Bug libstdc++/30047] New: Corrupt return value in specific context spam at david dot osborn dot name
2008-06-08 19:56 ` [Bug target/30047] " gcc at david dot osborn dot name
2008-06-08 20:02 ` gcc at david dot osborn dot name
     [not found] <bug-30047-4@http.gcc.gnu.org/bugzilla/>
2011-04-12 19:44 ` ktietz at gcc dot gnu.org

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).