Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/ipa/devirt-23.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do run } */ /* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp -fno-devirtualize-speculatively" } */ /* Main purpose is to verify that we do not produce wrong devirtualization to C::m_fn1. We currently devirtualize to B::m_fn1, so check that. */ #include <stdlib.h> class A { public: unsigned length; }; class B {}; class MultiTermDocs : public virtual B { protected: A readerTermDocs; A subReaders; virtual B *m_fn1(int *) { return NULL; } virtual inline ~MultiTermDocs(); inline void wrap(void) { m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); m_fn1(NULL); } }; class C : MultiTermDocs { B *m_fn1(int *); }; MultiTermDocs::~MultiTermDocs() { wrap (); if (&readerTermDocs) { B *a; for (unsigned i = 0; i < subReaders.length; i++) (a != 0); } } B *C::m_fn1(int *) { abort (); } int main() { class C c; } /* { dg-final { scan-ipa-dump "Discovered a virtual call to" "cp" { xfail *-*-* } } } */