Bug#758007: clang-3.4: generated executable receives SIGSEGFAULT when compiled with -O2

Dominik Wójt domin144 at poczta.onet.pl
Wed Aug 13 09:32:28 UTC 2014


Package: clang-3.4
Version: 1:3.4.2-6
Severity: important

Dear Maintainer,

The attached simple example receives SIGSEGFAULT when compiled with this
command:
        clang++ -O2 -g -o segfault segfault.cpp

segault.cpp:
    #include <iostream>
    #include <cassert>

    class SampleYVector
    {

    public:
        SampleYVector()
            :x(0)
            ,y(0)
        {}
        SampleYVector(int x_, int y_)
            :x(x_)
            ,y(y_)
        {}

        SampleYVector& operator&= (const int mask)
        {
            x &= mask;
            y &= mask;
            return *this;
        }

        int x;
        int y;
    };

    SampleYVector operator& (const SampleYVector &lhs, const int mask)
    {
        SampleYVector temp(lhs);
        temp &= mask;
        return temp;
    }

    struct InterPrediction
    {
    public:

        int leftDataMargin;
        int rightDataMargin;

        void test(const SampleYVector &mv);

    };

    void getMargins(const int fractional, int &topLeftMargin, int
&bottomRightMargin)
    {
        switch (fractional)
        {
            case 0:
                topLeftMargin = 0;
                bottomRightMargin = 0;
                break;

            case 1:
                topLeftMargin = 3;
                bottomRightMargin = 3;
                break;

            case 2:
                topLeftMargin = 3;
                bottomRightMargin = 4;
                break;

            case 3:
                topLeftMargin = 2;
                bottomRightMargin = 4;
                break;

            case 4:
                topLeftMargin = 1;
                bottomRightMargin = 2;
                break;

            default:
                assert(false);
                break;
        }
    }

    void InterPrediction::test(const SampleYVector &mv)
    {
        const SampleYVector mvFrac = mv & 3;
        std::cout << mvFrac.x << "x" << mvFrac.y << '\n';

        const int fractionalX = 0;
        std::cout << fractionalX << std::endl;
        getMargins(mvFrac.x, leftDataMargin, rightDataMargin);
    }

    int main()
    {
        SampleYVector mv(0, 2);
        InterPrediction interPrediction;
        interPrediction.test(mv);
        return 0;
    }

run with:
        $ ./segfault
        0x2
        0
        this = 0x7fff11f9ed18
        &mv = 0x7fff11f9ed20
        Segmentation fault

When compiled without "-O2" the executable executes successfully.

Best regards,
Dominik Wójt



-- System Information:
Debian Release: jessie/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.14-2-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages clang-3.4 depends on:
ii  libc6                    2.19-7
ii  libc6-dev                2.19-7
ii  libclang-common-3.4-dev  1:3.4.2-6
ii  libclang1-3.4            1:3.4.2-6
ii  libffi6                  3.1-2
ii  libgcc-4.9-dev           4.9.1-4
ii  libgcc1                  1:4.9.1-4
ii  libllvm3.4               1:3.4.2-6
ii  libobjc-4.9-dev          4.9.1-4
ii  libstdc++-4.9-dev        4.9.1-4
ii  libstdc++6               4.9.1-4
ii  libtinfo5                5.9+20140712-2

Versions of packages clang-3.4 recommends:
ii  llvm-3.4-dev  1:3.4.2-6
ii  python        2.7.8-1

Versions of packages clang-3.4 suggests:
pn  clang-3.4-doc  <none>
pn  gnustep        <none>
pn  gnustep-devel  <none>

-- no debconf information



More information about the Pkg-llvm-team mailing list