blob: bb7b61cad436db139673c88cc472e1709694671d [file] [log] [blame]
// { dg-do run }
// { dg-options "-O2 -fdump-tree-optimized" }
// { dg-require-effective-target c++11 }
#include <string.h>
#include <iostream>
#include <map>
namespace {
struct Buf {
char * buf; int a{0}; int b{0};
Buf(char * b) : buf(b) { }
void add(int v) {
::memcpy(buf, &v, sizeof(v));
a += sizeof(v);
b += sizeof(v);
}
};
struct A {
virtual void fill(Buf &buf) {
buf.add(type());
buf.add(type());
}
virtual ~A() {}
virtual int type() = 0;
};
struct BA : A {
void fill(Buf &buf) {
A::fill(buf);
buf.add(type());
buf.add(type());
}
int type() final {
return 1;
}
};
struct CBA final : BA {
};
struct CA final : A {
::std::map<int, int> m;
int type() final {
return 2;
}
};
}
int main(int argc, char ** ) {
char d[1024];
CBA cba;
Buf buf(d);
cba.fill(buf);
CA ca;
return 0;
}
// { dg-final { scan-tree-dump-not "__builtin_unreachable" "optimized" } }