re PR c++/27177 (ICE in build_simple_base_path, at cp/class.c:474)
PR c++/27177 * call.c (standard_conversion): Require that the derived type be complete when performing a derived-to-base conversion. PR c++/27177 * g++.dg/expr/cast7.C: New test. From-SVN: r114448
This commit is contained in:
parent
6edf8a5229
commit
b6ca28e64b
4 changed files with 37 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2006-06-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/27177
|
||||
* call.c (standard_conversion): Require that the derived type be
|
||||
complete when performing a derived-to-base conversion.
|
||||
|
||||
2006-06-04 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/27819
|
||||
|
|
|
@ -727,7 +727,19 @@ standard_conversion (tree to, tree from, tree expr, bool c_cast_p,
|
|||
that necessitates this conversion is ill-formed.
|
||||
Therefore, we use DERIVED_FROM_P, and do not check
|
||||
access or uniqueness. */
|
||||
&& DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
|
||||
&& DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from))
|
||||
/* If FROM is not yet complete, then we must be parsing
|
||||
the body of a class. We know what's derived from
|
||||
what, but we can't actually perform a
|
||||
derived-to-base conversion. For example, in:
|
||||
|
||||
struct D : public B {
|
||||
static const int i = sizeof((B*)(D*)0);
|
||||
};
|
||||
|
||||
the D*-to-B* conversion is a reinterpret_cast, not a
|
||||
static_cast. */
|
||||
&& COMPLETE_TYPE_P (TREE_TYPE (from)))
|
||||
{
|
||||
from =
|
||||
cp_build_qualified_type (TREE_TYPE (to),
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-06-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/27177
|
||||
* g++.dg/expr/cast7.C: New test.
|
||||
|
||||
2006-06-06 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* lib/gcc-dg.exp (gcc-dg-test-1): Detect and report ICE.
|
||||
|
|
13
gcc/testsuite/g++.dg/expr/cast7.C
Normal file
13
gcc/testsuite/g++.dg/expr/cast7.C
Normal file
|
@ -0,0 +1,13 @@
|
|||
// PR c++/27177
|
||||
|
||||
struct X {};
|
||||
|
||||
struct Y : virtual X {};
|
||||
struct Z : virtual X {};
|
||||
|
||||
struct A : Y, Z {};
|
||||
|
||||
struct B : A
|
||||
{
|
||||
static const int i = sizeof((Z*)(B*)0);
|
||||
};
|
Loading…
Add table
Reference in a new issue