[LLVMdev] Inclusion of iostream affects devirtualization in release_35

martin krastev blu.dark at gmail.com
Wed Jan 7 00:03:22 PST 2015


Hello,

I've stumbled upon the following behavior in branches/release_35 (as of
218689) under ubuntu 14.04 LTS amd64: whenever I include the (system-wise)
gnu iostream header, clang++ stops devirtualizing the following code:


#if BREAKAGE_ENSUES
#include <iostream>
#endif

struct Base {
virtual int foo() const = 0;
};

struct A : Base {
int a;

A(const int a)
: a(a) {
}

int foo() const {
return a;
}
};

struct B : Base {
const Base* b;

B(const Base* const base)
: b(base) {
}

int foo() const {
return b->foo();
}
};

const A a(42);
const B b(&a);

int main(int, char**) {
return b.foo();
}


Is that a known issue, and if not, under what category should I file a
ticket for it?

Best regards,
Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150107/d8964242/attachment.html>


More information about the llvm-dev mailing list