summaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-28 05:17:14 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-28 05:17:14 +0000
commit9bfe0f4ab82908cb0373a22c72516d3579726792 (patch)
tree7dd36dec39291468ce49f6128a24f9fb8a5593fa /gcc/cp
parent0b755accc08bd537efa646026020b79888be0cb4 (diff)
downloadgcc-9bfe0f4ab82908cb0373a22c72516d3579726792.tar.gz
PR c++/17435
* call.c (convert_like_real): Fix formatting. (initialize_reference): When binding a temporary to a base class, ensure that the nominal copy made is to the derived class, not the base class. PR c++/18140 * parser.c (cp_parser_next_token_ends_template_argument_p): Do not include ">>". PR c++/17435 * g++.dg/init/ref12.C: New test. PR c++/18140 * g++.dg/template/shift1.C: New test. * g++.dg/template/error10.C: Adjust error markers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89738 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog12
-rw-r--r--gcc/cp/call.c9
-rw-r--r--gcc/cp/parser.c7
3 files changed, 21 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a6aa65e3819..d4df8e59e5a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,15 @@
+2004-10-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/17435
+ * call.c (convert_like_real): Fix formatting.
+ (initialize_reference): When binding a temporary to a base class,
+ ensure that the nominal copy made is to the derived class, not the
+ base class.
+
+ PR c++/18140
+ * parser.c (cp_parser_next_token_ends_template_argument_p): Do not
+ include ">>".
+
2004-10-27 Andrew Pinski <pinskia@physics.uc.edu>
* decl.c: Move the q after the %.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index aedc9278b9d..9ff5b7ca3b1 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4239,7 +4239,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
expr = decl_constant_value (expr);
if (convs->check_copy_constructor_p)
check_constructor_callable (totype, expr);
- return expr;
+ return expr;
case ck_ambig:
/* Call build_user_type_conversion again for the error. */
return build_user_type_conversion
@@ -6467,7 +6467,7 @@ initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
conv = conv->u.next;
/* If the next conversion is a BASE_CONV, skip that too -- but
remember that the conversion was required. */
- if (conv->kind == ck_base && conv->need_temporary_p)
+ if (conv->kind == ck_base)
{
if (conv->check_copy_constructor_p)
check_constructor_callable (TREE_TYPE (expr), expr);
@@ -6537,6 +6537,11 @@ initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
}
/* Use its address to initialize the reference variable. */
expr = build_address (var);
+ if (base_conv_type)
+ expr = convert_to_base (expr,
+ build_pointer_type (base_conv_type),
+ /*check_access=*/true,
+ /*nonnull=*/true);
expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), init, expr);
}
else
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 4cfcf73a659..ccb1ac184ce 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -15474,9 +15474,7 @@ cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
}
/* Returns TRUE iff the next token is the "," or ">" ending a
- template-argument. ">>" is also accepted (after the full
- argument was parsed) because it's probably a typo for "> >",
- and there is a specific diagnostic for this. */
+ template-argument. */
static bool
cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
@@ -15484,8 +15482,7 @@ cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
cp_token *token;
token = cp_lexer_peek_token (parser->lexer);
- return (token->type == CPP_COMMA || token->type == CPP_GREATER
- || token->type == CPP_RSHIFT);
+ return (token->type == CPP_COMMA || token->type == CPP_GREATER);
}
/* Returns TRUE iff the n-th token is a ">", or the n-th is a "[" and the