You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by "Martin Sebor (JIRA)" <ji...@apache.org> on 2007/01/05 20:41:27 UTC

[jira] Created: (STDCXX-313) std::valarray::apply() uses uninitialized storage

std::valarray::apply() uses uninitialized storage
-------------------------------------------------

                 Key: STDCXX-313
                 URL: https://issues.apache.org/jira/browse/STDCXX-313
             Project: C++ Standard Library
          Issue Type: Bug
          Components: 26. Numerics
    Affects Versions: 4.1.2, 4.1.3
         Environment: all
            Reporter: Martin Sebor
         Assigned To: Martin Sebor
             Fix For: 4.2


The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
with the latest trunk it aborts at runtime.

$ cat t.cpp && make t && ./t
#include <cassert>
#include <valarray>

struct S {
    const S* const self;
    S (): self (this) { }
    S (const S &s): self (this) { assert (&s == s.self); }
    ~S () { assert (this == self); }
    S& operator= (const S &s) {
        assert (this == self && &s == s.self);
        return *this;
    }
};

S foo (S s) { return s; }
S bar (const S &s) { return s; }

int main ()
{
    const std::valarray<S> a (1);

    a.apply (foo);
    a.apply (bar);
}
gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include  -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long   t.cpp
gcc t.o -o t  -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s  -lsupc++ -lm 
Assertion failed: this == self && &s == s.self, file t.cpp, line 10
Abort (core dumped)


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

        

[jira] Updated: (STDCXX-313) std::valarray::apply() uses uninitialized storage

Posted by "Martin Sebor (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/STDCXX-313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Sebor updated STDCXX-313:
--------------------------------

    Severity: Runtime Error

> std::valarray::apply() uses uninitialized storage
> -------------------------------------------------
>
>                 Key: STDCXX-313
>                 URL: https://issues.apache.org/jira/browse/STDCXX-313
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 26. Numerics
>    Affects Versions: 4.1.2, 4.1.3
>         Environment: all
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>             Fix For: 4.2
>
>
> The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
> with the latest trunk it aborts at runtime.
> $ cat t.cpp && make t && ./t
> #include <cassert>
> #include <valarray>
> struct S {
>     const S* const self;
>     S (): self (this) { }
>     S (const S &s): self (this) { assert (&s == s.self); }
>     ~S () { assert (this == self); }
>     S& operator= (const S &s) {
>         assert (this == self && &s == s.self);
>         return *this;
>     }
> };
> S foo (S s) { return s; }
> S bar (const S &s) { return s; }
> int main ()
> {
>     const std::valarray<S> a (1);
>     a.apply (foo);
>     a.apply (bar);
> }
> gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include  -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long   t.cpp
> gcc t.o -o t  -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s  -lsupc++ -lm 
> Assertion failed: this == self && &s == s.self, file t.cpp, line 10
> Abort (core dumped)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (STDCXX-313) std::valarray::apply() uses uninitialized storage

Posted by "Farid Zaripov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/STDCXX-313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12533986 ] 

Farid Zaripov commented on STDCXX-313:
--------------------------------------

I have tested it with MSVC8 and gcc 4.2.0 / Linux.

> std::valarray::apply() uses uninitialized storage
> -------------------------------------------------
>
>                 Key: STDCXX-313
>                 URL: https://issues.apache.org/jira/browse/STDCXX-313
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 26. Numerics
>    Affects Versions: 4.1.2, 4.1.3
>         Environment: all
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>             Fix For: 4.2
>
>
> The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
> with the latest trunk it aborts at runtime.
> $ cat t.cpp && make t && ./t
> #include <cassert>
> #include <valarray>
> struct S {
>     const S* const self;
>     S (): self (this) { }
>     S (const S &s): self (this) { assert (&s == s.self); }
>     ~S () { assert (this == self); }
>     S& operator= (const S &s) {
>         assert (this == self && &s == s.self);
>         return *this;
>     }
> };
> S foo (S s) { return s; }
> S bar (const S &s) { return s; }
> int main ()
> {
>     const std::valarray<S> a (1);
>     a.apply (foo);
>     a.apply (bar);
> }
> gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include  -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long   t.cpp
> gcc t.o -o t  -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s  -lsupc++ -lm 
> Assertion failed: this == self && &s == s.self, file t.cpp, line 10
> Abort (core dumped)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (STDCXX-313) std::valarray::apply() uses uninitialized storage

Posted by "Martin Sebor (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/STDCXX-313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12533916 ] 

Martin Sebor commented on STDCXX-313:
-------------------------------------

As in the case of STDCXX-314, I couldn't reproduce this problem with gcc 3.4.6 or Intel C++ 10.0 on Linux, either. But I added a regression test for this issue as well so let's keep an eye on it and if it passes on other platforms we can go ahead and assume it either got fixed by some other change or it was a compiler bug.

> std::valarray::apply() uses uninitialized storage
> -------------------------------------------------
>
>                 Key: STDCXX-313
>                 URL: https://issues.apache.org/jira/browse/STDCXX-313
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 26. Numerics
>    Affects Versions: 4.1.2, 4.1.3
>         Environment: all
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>             Fix For: 4.2
>
>
> The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
> with the latest trunk it aborts at runtime.
> $ cat t.cpp && make t && ./t
> #include <cassert>
> #include <valarray>
> struct S {
>     const S* const self;
>     S (): self (this) { }
>     S (const S &s): self (this) { assert (&s == s.self); }
>     ~S () { assert (this == self); }
>     S& operator= (const S &s) {
>         assert (this == self && &s == s.self);
>         return *this;
>     }
> };
> S foo (S s) { return s; }
> S bar (const S &s) { return s; }
> int main ()
> {
>     const std::valarray<S> a (1);
>     a.apply (foo);
>     a.apply (bar);
> }
> gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include  -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long   t.cpp
> gcc t.o -o t  -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s  -lsupc++ -lm 
> Assertion failed: this == self && &s == s.self, file t.cpp, line 10
> Abort (core dumped)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (STDCXX-313) std::valarray::apply() uses uninitialized storage

Posted by "Farid Zaripov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/STDCXX-313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12533311 ] 

Farid Zaripov commented on STDCXX-313:
--------------------------------------

Could not reproduce this issue.

> std::valarray::apply() uses uninitialized storage
> -------------------------------------------------
>
>                 Key: STDCXX-313
>                 URL: https://issues.apache.org/jira/browse/STDCXX-313
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 26. Numerics
>    Affects Versions: 4.1.2, 4.1.3
>         Environment: all
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>             Fix For: 4.2
>
>
> The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
> with the latest trunk it aborts at runtime.
> $ cat t.cpp && make t && ./t
> #include <cassert>
> #include <valarray>
> struct S {
>     const S* const self;
>     S (): self (this) { }
>     S (const S &s): self (this) { assert (&s == s.self); }
>     ~S () { assert (this == self); }
>     S& operator= (const S &s) {
>         assert (this == self && &s == s.self);
>         return *this;
>     }
> };
> S foo (S s) { return s; }
> S bar (const S &s) { return s; }
> int main ()
> {
>     const std::valarray<S> a (1);
>     a.apply (foo);
>     a.apply (bar);
> }
> gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include  -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long   t.cpp
> gcc t.o -o t  -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s  -lsupc++ -lm 
> Assertion failed: this == self && &s == s.self, file t.cpp, line 10
> Abort (core dumped)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (STDCXX-313) std::valarray::apply() uses uninitialized storage

Posted by "Martin Sebor (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/STDCXX-313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Sebor closed STDCXX-313.
-------------------------------

    Resolution: Fixed

The regression test passes with (at least) gcc, Intel C++, VisualStudio, and Sun C++. Closing as Fixed.

> std::valarray::apply() uses uninitialized storage
> -------------------------------------------------
>
>                 Key: STDCXX-313
>                 URL: https://issues.apache.org/jira/browse/STDCXX-313
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 26. Numerics
>    Affects Versions: 4.1.2, 4.1.3
>         Environment: all
>            Reporter: Martin Sebor
>            Assignee: Martin Sebor
>             Fix For: 4.2
>
>
> The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
> with the latest trunk it aborts at runtime.
> $ cat t.cpp && make t && ./t
> #include <cassert>
> #include <valarray>
> struct S {
>     const S* const self;
>     S (): self (this) { }
>     S (const S &s): self (this) { assert (&s == s.self); }
>     ~S () { assert (this == self); }
>     S& operator= (const S &s) {
>         assert (this == self && &s == s.self);
>         return *this;
>     }
> };
> S foo (S s) { return s; }
> S bar (const S &s) { return s; }
> int main ()
> {
>     const std::valarray<S> a (1);
>     a.apply (foo);
>     a.apply (bar);
> }
> gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include  -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long   t.cpp
> gcc t.o -o t  -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s  -lsupc++ -lm 
> Assertion failed: this == self && &s == s.self, file t.cpp, line 10
> Abort (core dumped)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.