public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/50957] New: complex<T> ctor drops sign of zero (sometimes)
@ 2011-11-02  8:24 kreckel at ginac dot de
  2011-11-02  9:37 ` [Bug c++/50957] [C++0x][constexpr] " rguenth at gcc dot gnu.org
  2011-11-02  9:40 ` paolo.carlini at oracle dot com
  0 siblings, 2 replies; 3+ messages in thread
From: kreckel at ginac dot de @ 2011-11-02  8:24 UTC (permalink / raw)
  To: gcc-bugs

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

             Bug #: 50957
           Summary: complex<T> ctor drops sign of zero (sometimes)
    Classification: Unclassified
           Product: gcc
           Version: 4.6.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: kreckel@ginac.de


When compiling with -std=c++0x (and only then), the ctor of g++ drops the sign
of zero. (This sometimes devastates the correct choice of branch cuts in the
complex plain.) Interestingly, it doesn't happen with my mock complex class.

#include <iostream>
#include <complex>
using namespace std;

template<typename _Tp>
struct mock_complex
{
    typedef _Tp value_type;
    _GLIBCXX_CONSTEXPR mock_complex(const _Tp& __r = _Tp(), const _Tp& __i =
_Tp())
    : _M_real(__r), _M_imag(__i) { }
    const _Tp
    real() const { return _M_real; }
    const _Tp
    imag() const { return _M_imag; }
private:
    _Tp _M_real;
    _Tp _M_imag;
};

int main()
{
    mock_complex<double> z1(-0.0, 1.0);
    cout << signbit(z1.real()) << signbit(z1.imag()) << endl;  // correct: 10

    complex<double> z2(-0.0, 1.0);
    cout << signbit(z2.real()) << signbit(z2.imag()) << endl;  // wrong: 00
}


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

* [Bug c++/50957] [C++0x][constexpr] complex<T> ctor drops sign of zero (sometimes)
  2011-11-02  8:24 [Bug libstdc++/50957] New: complex<T> ctor drops sign of zero (sometimes) kreckel at ginac dot de
@ 2011-11-02  9:37 ` rguenth at gcc dot gnu.org
  2011-11-02  9:40 ` paolo.carlini at oracle dot com
  1 sibling, 0 replies; 3+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-11-02  9:37 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
           Keywords|                            |wrong-code
   Last reconfirmed|                            |2011-11-02
          Component|libstdc++                   |c++
                 CC|                            |jason at gcc dot gnu.org
     Ever Confirmed|0                           |1
            Summary|complex<T> ctor drops sign  |[C++0x][constexpr]
                   |of zero (sometimes)         |complex<T> ctor drops sign
                   |                            |of zero (sometimes)
      Known to fail|                            |4.6.2

--- Comment #1 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-11-02 09:36:44 UTC ---
Confirmed.  Looks like a frontend issue (probably related to constexpr?).
In .initial we have

{
  struct mock_complex z1 = {._M_real=-0.0, ._M_imag=1.0e+0};
  struct complex z2 = {._M_value=__complex__ (0.0, 1.0e+0)};

  <<cleanup_point   struct mock_complex z1 = {._M_real=-0.0,
._M_imag=1.0e+0};>>;

thus z2 is already initialized from a bogus value.  Without -std=c++0x we have

  struct complex z2;
  <<cleanup_point <<< Unknown tree: expr_stmt
  std::complex<double>::complex (&z2, -0.0, 1.0e+0) >>>>>;

which is correct.


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

* [Bug c++/50957] [C++0x][constexpr] complex<T> ctor drops sign of zero (sometimes)
  2011-11-02  8:24 [Bug libstdc++/50957] New: complex<T> ctor drops sign of zero (sometimes) kreckel at ginac dot de
  2011-11-02  9:37 ` [Bug c++/50957] [C++0x][constexpr] " rguenth at gcc dot gnu.org
@ 2011-11-02  9:40 ` paolo.carlini at oracle dot com
  1 sibling, 0 replies; 3+ messages in thread
From: paolo.carlini at oracle dot com @ 2011-11-02  9:40 UTC (permalink / raw)
  To: gcc-bugs

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

Paolo Carlini <paolo.carlini at oracle dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE

--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-11-02 09:39:20 UTC ---
This just PR48760 in a different form, mainline is fine.

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


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

end of thread, other threads:[~2011-11-02  9:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-02  8:24 [Bug libstdc++/50957] New: complex<T> ctor drops sign of zero (sometimes) kreckel at ginac dot de
2011-11-02  9:37 ` [Bug c++/50957] [C++0x][constexpr] " rguenth at gcc dot gnu.org
2011-11-02  9:40 ` paolo.carlini at oracle dot com

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