From 2bb79e651f58abb9208f205b364287be601a7dae Mon Sep 17 00:00:00 2001 From: jakub Date: Sat, 16 Mar 2013 19:36:41 +0000 Subject: * tree.c (cp_tree_equal): Fix a pasto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196705 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/cp/tree.c') diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 178b80aa24f..1b484b18cdf 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2486,7 +2486,7 @@ cp_tree_equal (tree t1, tree t2) t1 = TREE_OPERAND (t1, 0); for (code2 = TREE_CODE (t2); CONVERT_EXPR_CODE_P (code2) - || code1 == NON_LVALUE_EXPR; + || code2 == NON_LVALUE_EXPR; code2 = TREE_CODE (t2)) t2 = TREE_OPERAND (t2, 0); -- cgit v1.2.1 From f87b283e724910266e6c101d3fdb78b1313f1854 Mon Sep 17 00:00:00 2001 From: jason Date: Sun, 17 Mar 2013 02:37:09 +0000 Subject: N3276 PR c++/52748 * cp-tree.h (tsubst_flags): Add tf_decltype. * call.c (build_cxx_call): Don't build a temporary if it's set. (build_over_call): Make sure it's only passed to build_cxx_call. * parser.c (cp_parser_primary_expression): Add decltype_p parm. (cp_parser_unary_expression): Likewise. (cp_parser_cast_expression): Likewise. (cp_parser_binary_expression): Likewise. (cp_parser_assignment_expression): Likewise. (cp_parser_postfix_expression): Likewise. Pass tf_decltype. (cp_parser_explicit_instantiation): Add decltype_p. Force a temporary for a call on the LHS of a comma. (cp_parser_decltype): Pass true to decltype_p parms. * pt.c (tsubst) [DECLTYPE_TYPE]: Pass tf_decltype. (tsubst_copy_and_build): Pass tf_decltype down only for CALL_EXPR and the RHS of COMPOUND_EXPR. * tree.c (build_cplus_new): Call complete_type_or_maybe_complain. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196736 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/tree.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/cp/tree.c') diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 1b484b18cdf..6dc33b9493f 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -469,6 +469,9 @@ build_cplus_new (tree type, tree init, tsubst_flags_t complain) tree rval = build_aggr_init_expr (type, init); tree slot; + if (!complete_type_or_maybe_complain (type, init, complain)) + return error_mark_node; + /* Make sure that we're not trying to create an instance of an abstract class. */ if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain)) -- cgit v1.2.1 From 507e3d234fd3be3b79404ff4b145d628ae87b0ea Mon Sep 17 00:00:00 2001 From: jason Date: Sun, 17 Mar 2013 02:38:35 +0000 Subject: PR c++/56039 * tree.c (strip_typedefs_expr): Complain about lambda, don't abort. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196741 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/tree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gcc/cp/tree.c') diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 6dc33b9493f..42ba677056c 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1421,7 +1421,8 @@ strip_typedefs_expr (tree t) } case LAMBDA_EXPR: - gcc_unreachable (); + error ("lambda-expression in a constant expression"); + return error_mark_node; default: break; -- cgit v1.2.1 From 9dd19b79a49ba8b497c0e9f44bb178a8d5bc4807 Mon Sep 17 00:00:00 2001 From: jason Date: Sun, 17 Mar 2013 02:38:50 +0000 Subject: PR c++/54764 PR c++/55972 * name-lookup.h (tag_scope): Add ts_lambda. * semantics.c (begin_lambda_type): Use it. * decl.c (xref_tag_1): Set CLASSTYPE_LAMBDA_EXPR. * pt.c (check_default_tmpl_args): Ignore lambdas. (push_template_decl_real): Handle lambdas. * tree.c (no_linkage_check): Adjust lambda check. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196742 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/tree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gcc/cp/tree.c') diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 42ba677056c..a1cce647b24 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2028,11 +2028,12 @@ no_linkage_check (tree t, bool relaxed_p) if (TYPE_PTRMEMFUNC_P (t)) goto ptrmem; /* Lambda types that don't have mangling scope have no linkage. We - check CLASSTYPE_LAMBDA_EXPR here rather than LAMBDA_TYPE_P because + check CLASSTYPE_LAMBDA_EXPR for error_mark_node because when we get here from pushtag none of the lambda information is set up yet, so we want to assume that the lambda has linkage and fix it up later if not. */ if (CLASSTYPE_LAMBDA_EXPR (t) + && CLASSTYPE_LAMBDA_EXPR (t) != error_mark_node && LAMBDA_TYPE_EXTRA_SCOPE (t) == NULL_TREE) return t; /* Fall through. */ -- cgit v1.2.1 From 694683bbcd14ccda5b40367fe2ad0f75d030db6e Mon Sep 17 00:00:00 2001 From: gdr Date: Fri, 22 Mar 2013 03:55:51 +0000 Subject: * cp-tree.h (identifier_p): New. * call.c: Throughout, call identifier_p insstead of direct comparaison of TREE_CODE against IDENTIFIER_NODE. * decl.c: Likewisse. * decl2.c: Likewise. * init.c: Likewise. * mangle.c: Likewise. * name-lookup.c: Likewise. * parser.c: Likewise. * pt.c: Likewise. * search.c: Likewise. * semantics.c: Likewise. * tree.c: Likewise. * typeck.c: Likewise. * typeck2.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196897 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/cp/tree.c') diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index a1cce647b24..3cfc8690d89 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1734,7 +1734,7 @@ is_overloaded_fn (tree x) tree dependent_name (tree x) { - if (TREE_CODE (x) == IDENTIFIER_NODE) + if (identifier_p (x)) return x; if (TREE_CODE (x) != COMPONENT_REF && TREE_CODE (x) != OFFSET_REF -- cgit v1.2.1