Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/ipa/devirt-29.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do run { target c++11 } } */ /* There is a devirtualizable call. In PR60306 we deduced wrong target to cxa_pure_virtual. For gcc 4.10 we temporarily disable the devirtualization. */ /* { dg-options "-O3" } */ #include <vector> using std::vector; class Object { public: virtual Object* clone() const =0; virtual int type() const {return 0;} Object& operator=(const Object&) {return *this;} Object() {} Object(const Object&) {} virtual ~Object() {} }; Object* f(const Object&o) { return o.clone(); } template<typename T> class Box: public Object, public T { public: Box<T>* clone() const {return new Box<T>(*this);} Box<T>& operator=(const Box<T>& t) { T::operator=(t); return *this; } Box<T>& operator=(const T& t) { T::operator=(t); return *this; } Box() = default; Box(const Box<T>&) = default; explicit Box(const T& t):T(t) {} }; template <typename T> using Vector = Box<vector<T>>; typedef Vector<int> OVector; OVector edges_connecting_to_node(int n) { OVector branch_list_; for(int i=0;i<n;i++) branch_list_.push_back(i); return branch_list_; } int main(int argc,char* argv[]) { for(int n=0; n < argc; n++) { auto x = edges_connecting_to_node(1); x.clone(); f(x); } }