std::valarray<>::operator&& () produces wrong result
----------------------------------------------------

                 Key: STDCXX-1061
                 URL: https://issues.apache.org/jira/browse/STDCXX-1061
             Project: C++ Standard Library
          Issue Type: Bug
          Components: 23. Containers
    Affects Versions: 4.2.1
         Environment: Solaris 10 and 11
Red Hat Linux
OpenSuSE Linux
SunPro C++ 12.1, 12.2, 12.3

Defect is independent of platform and/or compiler.

            Reporter: Stefan Teleman
             Fix For: 4.2.x, 4.3.x, 5.0.0
         Attachments: stdcxx-1061.patch

std::valarray<>::operator&& () produces wrong result:

{code:title=test.cc|borderStyle=solid}
#include <iostream>
#include <valarray>

static const size_t maxlen = 10;

void print(const std::valarray<bool>& v)
{
    for (size_t i = 0; i < maxlen; ++i)
        std::cerr << v[i] << " ";
    std::cerr << std::endl;
}

int main()
{
    int nonzero[maxlen] = { 0, 1, 0, 3, 0, -5, 0, -7, 0, -11 };
    int one = 1;
    int ret = 0;
    size_t i;

    std::valarray<int> v0 (nonzero, maxlen);
    std::valarray<bool> v3 (maxlen);

    for (i = 0; i < maxlen; i++)
        v3[i] = nonzero[i] && one;

    std::valarray<bool> v1 = std::operator&& (v0, one);

    for (i = 0; i < maxlen; i++)
    {
        if ((nonzero[i] && one) != v1[i])
            ret = 1;
    }

    if (ret)
    {
        std::cerr << "expected: ";
        print (v3);
        std::cerr << "got: ";
        print (v1);
    }

    return ret;
}
{code}

1. Output from GCC 4.5.0:
{noformat}
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:22:47][2463]>> ./v-gcc
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:01][2464]>> echo $status
0
{noformat}

2. Output from SunPro C++ 12.2 with stlport4:
{noformat}
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:02][2465]>> ./v-ss122-stlport
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:08][2466]>> echo $status
0
{noformat}

3. Output from SunPro C++ 12.2 with our patched stdcxx:
{noformat}
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:10][2467]>> ./v-ss122-stdcxx
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:18][2468]>> echo $status
0
{noformat}

4. Output from Pathscale 4.0.12.1 (which didn't patch stdcxx):
{noformat}
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:20][2469]>> ./v-pathscale
expected: 0 1 0 1 0 1 0 1 0 1 
got: 0 1 0 0 0 0 0 0 0 0 
[steleman@darthvader][/src/steleman/programming/stdcxx-ss122/bugfixes-sunw/nothrow][02/08/2012
 13:23:24][2470]>> echo $status
1
{noformat}

Patch for stdcxx 4.2.1 to follow shortly.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to