re PR c++/67846 (ICE on code with lambda expression on x86_64-linux-gnu in check_return_expr, at cp/typeck.c:8609)
/cp 2015-11-05 Paolo Carlini <paolo.carlini@oracle.com> PR c++/67846 * parser.c (cp_parser_lambda_body): Check lambda_return_type return value. * typeck2.c (cxx_incomplete_type_diagnostic): Print member or member function used invalidly. /testsuite 2015-11-05 Paolo Carlini <paolo.carlini@oracle.com> PR c++/67846 * g++.dg/cpp0x/lambda/lambda-ice15.C: New. From-SVN: r229819
This commit is contained in:
parent
451e8dae5d
commit
7e4756e843
5 changed files with 35 additions and 7 deletions
|
@ -1,3 +1,11 @@
|
|||
2015-11-05 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/67846
|
||||
* parser.c (cp_parser_lambda_body): Check lambda_return_type
|
||||
return value.
|
||||
* typeck2.c (cxx_incomplete_type_diagnostic): Print member or
|
||||
member function used invalidly.
|
||||
|
||||
2015-11-05 Jakub Jelinek <jakub@redhat.com>
|
||||
Ilya Verbin <ilya.verbin@intel.com>
|
||||
|
||||
|
@ -27,8 +35,8 @@
|
|||
cp_parser_require_pragma_eol instead of cp_parser_skip_to_pragma_eol.
|
||||
(cp_parser_omp_end_declare_target): Call cp_parser_require_pragma_eol
|
||||
instead of cp_parser_skip_to_pragma_eol.
|
||||
* decl2.c (cplus_decl_attributes): Don't diagnose block scope vars inside
|
||||
declare target.
|
||||
* decl2.c (cplus_decl_attributes): Don't diagnose block scope vars
|
||||
inside declare target.
|
||||
* pt.c (tsubst_omp_clauses): If OMP_CLAUSE_LINEAR_VARIABLE_STRIDE,
|
||||
use tsubst_omp_clause_decl instead of tsubst_expr on
|
||||
OMP_CLAUSE_LINEAR_STEP. Handle non-static data members in shared
|
||||
|
|
|
@ -9887,7 +9887,12 @@ cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
|
|||
if (cp_parser_parse_definitely (parser))
|
||||
{
|
||||
if (!processing_template_decl)
|
||||
apply_deduced_return_type (fco, lambda_return_type (expr));
|
||||
{
|
||||
tree type = lambda_return_type (expr);
|
||||
apply_deduced_return_type (fco, type);
|
||||
if (type == error_mark_node)
|
||||
expr = error_mark_node;
|
||||
}
|
||||
|
||||
/* Will get error here if type not deduced yet. */
|
||||
finish_return_stmt (expr);
|
||||
|
|
|
@ -516,12 +516,12 @@ cxx_incomplete_type_diagnostic (const_tree value, const_tree type,
|
|||
if (DECL_FUNCTION_MEMBER_P (member)
|
||||
&& ! flag_ms_extensions)
|
||||
emit_diagnostic (diag_kind, input_location, 0,
|
||||
"invalid use of member function "
|
||||
"(did you forget the %<()%> ?)");
|
||||
"invalid use of member function %qD "
|
||||
"(did you forget the %<()%> ?)", member);
|
||||
else
|
||||
emit_diagnostic (diag_kind, input_location, 0,
|
||||
"invalid use of member "
|
||||
"(did you forget the %<&%> ?)");
|
||||
"invalid use of member %qD "
|
||||
"(did you forget the %<&%> ?)", member);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-11-05 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/67846
|
||||
* g++.dg/cpp0x/lambda/lambda-ice15.C: New.
|
||||
|
||||
2015-11-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* c-c++-common/gomp/clauses-2.c (foo): Adjust for diagnostics
|
||||
|
|
10
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice15.C
Normal file
10
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice15.C
Normal file
|
@ -0,0 +1,10 @@
|
|||
// PR c++/67846
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
class A
|
||||
{
|
||||
void foo ()
|
||||
{
|
||||
[=] { return foo; }; // { dg-error "invalid use of member function" }
|
||||
}
|
||||
};
|
Loading…
Add table
Reference in a new issue