From 59be85d7bdd5fb12fad218b848b52f34784bdb7d Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 3 Feb 1995 03:45:07 +0000 Subject: [PATCH] Fix MI conversions From-SVN: r8856 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/class.c | 4 ++++ gcc/cp/cvt.c | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c5cfb77b45b..c871a580395 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +Thu Feb 2 15:07:58 1995 Jason Merrill + + * class.c (build_vbase_path): Bash types to make the backend happy. + * cvt.c (build_up_reference): Bash the types bashed by + build_vbase_path to be reference types instead of pointer types. + (convert_to_reference): Ditto. + Wed Jan 25 15:02:09 1995 David S. Miller (davem@nadzieja.rutgers.edu) * class.c (instantiate_type): Change error message text. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index ec624b9e0d9..79e76bb3a76 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -303,6 +303,10 @@ build_vbase_path (code, type, expr, path, alias_this) if (TREE_INT_CST_LOW (offset)) { + /* Bash types to make the backend happy. */ + offset = convert (type, offset); + expr = build1 (NOP_EXPR, type, expr); + /* For multiple inheritance: if `this' can be set by any function, then it could be 0 on entry to any function. Preserve such zeroness here. Otherwise, only in the diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index d05516f9a11..27d38fcdb12 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -609,6 +609,9 @@ build_up_reference (type, arg, flags, checkconst) rval = convert_to_pointer_force (build_pointer_type (target_type), rval); TREE_TYPE (rval) = type; + if (TREE_CODE (rval) == PLUS_EXPR || TREE_CODE (rval) == MINUS_EXPR) + TREE_TYPE (TREE_OPERAND (rval, 0)) + = TREE_TYPE (TREE_OPERAND (rval, 1)) = type; } TREE_CONSTANT (rval) = literal_flag; return rval; @@ -683,6 +686,9 @@ convert_to_reference (reftype, expr, convtype, flags, decl) convtype, flags); TREE_TYPE (expr) = type; TREE_TYPE (rval) = reftype; + if (TREE_CODE (rval) == PLUS_EXPR || TREE_CODE (rval) == MINUS_EXPR) + TREE_TYPE (TREE_OPERAND (rval, 0)) + = TREE_TYPE (TREE_OPERAND (rval, 1)) = reftype; return rval; } -- 2.30.2