]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/9433 (SegFault in dynamic_cast)
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 28 Jan 2003 17:25:50 +0000 (17:25 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 28 Jan 2003 17:25:50 +0000 (17:25 +0000)
libstdc++-v3:
PR c++/9433
* libsupc++/tinfo.cc (__vmi_class_type_info::__do_dyncast): Cope
with bases which are very ambiguous.
gcc/testsuite:
PR c++/9433
* g++.dg/abi/dcast1.C: New test.

From-SVN: r61986

gcc/testsuite/ChangeLog
libstdc++-v3/ChangeLog
libstdc++-v3/libsupc++/tinfo.cc

index e5aa3405bfe8ef3d222f9f2e7b8698f4142ef867..8890a6d8ef6855cce0ae80cce0783482398f647a 100644 (file)
@@ -1,3 +1,8 @@
+2003-01-28  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/9433
+       * g++.dg/abi/dcast1.C: New test.
+
 2003-01-27  Jeffrey D. Oldham  <oldham@codesourcery.com>
 
        PR c++/47
index 5ca64106f8145b99c19e965fe2369cd1a47178ab..025af34b0477ed5fbb9d628116445d10b0927640 100644 (file)
@@ -1,3 +1,9 @@
+2003-01-28  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/9433
+       * libsupc++/tinfo.cc (__vmi_class_type_info::__do_dyncast): Cope
+       with bases which are very ambiguous.
+
 2003-01-27  Alexandre Oliva  <aoliva@redhat.com>
 
        * acinclude.m4 (glibcpp_toolexeclibdir): Instead of
index be041048a602bf971f217b7718e596881eed3b6a..d2e189a1095fb827ff5032cc3e8e2d75cc7f956f 100644 (file)
@@ -1,5 +1,5 @@
 // Methods for type_info for -*- C++ -*- Run Time Type Identification.
-// Copyright (C) 1994, 1996, 1998, 1999, 2000, 2001, 2002
+// Copyright (C) 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003
 // Free Software Foundation
 //
 // This file is part of GNU CC.
@@ -465,8 +465,9 @@ __do_dyncast (ptrdiff_t src2dst,
           result.whole2dst =
               __sub_kind (result.whole2dst | result2.whole2dst);
         }
-      else if ((result.dst_ptr != 0 | result_ambig)
-               && (result2.dst_ptr != 0 | result2_ambig))
+      else if ((result.dst_ptr != 0 & result2.dst_ptr != 0)
+              || (result.dst_ptr != 0 & result2_ambig)
+              || (result2.dst_ptr != 0 & result_ambig))
         {
           // Found two different DST_TYPE bases, or a valid one and a set of
           // ambiguous ones, must disambiguate. See whether SRC_PTR is