view gcc/testsuite/g++.old-deja/g++.other/dyncast5.C @ 144:8f4e72ab4e11

fix segmentation fault caused by nothing next cur_op to end
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 21:23:56 +0900
parents 04ced10e8804
children
line wrap: on
line source

// { dg-do run  }
// Copyright (C) 1999 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 6 Jun 1999 <nathan@acm.org>

// dynamic cast can only cast to public unambiguous bases

extern "C" void abort ();

struct A {virtual ~A(){} int m; };
struct B {virtual ~B(){} int m; };

struct C1 : A {int m;};
struct C2 : A {int m;};

// A is ambiguous, but private in one branch
struct D1 : B, C1, private C2 {int m;};
// A is ambiguous, and public in both branches
struct D2 : B, C1, C2 {int m;};

void fn(B *bd1, B *bd2)
{
  A *ad1;
  A *ad2;
  
  ad1 = dynamic_cast<A *>(bd1);
  if(ad1) abort();
  ad2 = dynamic_cast<A *>(bd2);
  if(ad2) abort();
}

int main()
{
  D1 d1;
  D2 d2;
  
  fn((B *)&d1, (B *)&d2);
  return 0;
}