This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/42462] New: wrong-code with computed-goto


> cat Foo.cc
#define INLINE inline __attribute__((always_inline))

template<class> struct Foo {
        inline bool isFalse() { return false; }
        template <bool>        void f1() {}
        template <bool> INLINE void f2() { f1<false>(); }
        template <bool>        void f3() { f2<false>(); }
        template <bool> INLINE void f4() { f3<false>(); }
        void exec2();
        void execute();
        inline void unused();
};

template<class T> inline void Foo<T>::unused() {
        f4<true>();
}

template<class T> void Foo<T>::exec2() {
        static void* table[2] = { &&begin, &&end };
        goto *(table[0]);
begin:
        if (isFalse()) f1<false>();
end:
        return;
}

template<class T> void Foo<T>::execute() {
        while (true) { exec2(); }
}

template class Foo<int>;

int main() {
        Foo<int> c;
        c.execute();
}


> g++ -O2 Foo.cc


This program should get stuck in an infinite loop (I confirmed this with
g++-4.4 (Debian 4.4.2-3) 4.4.2). But when compiled with a recent SVN snapshot
it exits immediately.

I'm using revision trunk@155361 on linux x86_64.


-- 
           Summary: wrong-code with computed-goto
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: wouter dot vermaelen at scarlet dot be


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]