re PR c++/51421 ([c++0x] ICE with invalid use of auto)
/cp 2012-08-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51421 * decl2.c (mark_used): Consistently return false after errors about uses before deduction of auto. * semantics.c (finish_id_expression): Check mark_used return value and return error_mark_node in case of failure. /testsuite 2012-08-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51421 * g++.dg/cpp0x/auto34.C: New. From-SVN: r190665
This commit is contained in:
parent
cd057e3af0
commit
f27a59cf8a
|
@ -1,3 +1,11 @@
|
|||
2012-08-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51421
|
||||
* decl2.c (mark_used): Consistently return false after errors
|
||||
about uses before deduction of auto.
|
||||
* semantics.c (finish_id_expression): Check mark_used return
|
||||
value and return error_mark_node in case of failure.
|
||||
|
||||
2012-08-24 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/51213 (again)
|
||||
|
|
|
@ -4238,7 +4238,10 @@ mark_used (tree decl)
|
|||
|| DECL_THUNK_P (decl))
|
||||
{
|
||||
if (!processing_template_decl && type_uses_auto (TREE_TYPE (decl)))
|
||||
{
|
||||
error ("use of %qD before deduction of %<auto%>", decl);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -4284,7 +4287,10 @@ mark_used (tree decl)
|
|||
}
|
||||
|
||||
if (type_uses_auto (TREE_TYPE (decl)))
|
||||
{
|
||||
error ("use of %qD before deduction of %<auto%>", decl);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* If we don't need a value, then we don't need to synthesize DECL. */
|
||||
if (cp_unevaluated_operand != 0)
|
||||
|
|
|
@ -3221,11 +3221,12 @@ finish_id_expression (tree id_expression,
|
|||
|
||||
/* Mark variable-like entities as used. Functions are similarly
|
||||
marked either below or after overload resolution. */
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
if ((TREE_CODE (decl) == VAR_DECL
|
||||
|| TREE_CODE (decl) == PARM_DECL
|
||||
|| TREE_CODE (decl) == CONST_DECL
|
||||
|| TREE_CODE (decl) == RESULT_DECL)
|
||||
mark_used (decl);
|
||||
&& !mark_used (decl))
|
||||
return error_mark_node;
|
||||
|
||||
/* Only certain kinds of names are allowed in constant
|
||||
expression. Template parameters have already
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-08-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51421
|
||||
* g++.dg/cpp0x/auto34.C: New.
|
||||
|
||||
2012-08-24 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/54363
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// PR c++/51421
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
int foo1(int);
|
||||
|
||||
void bar1()
|
||||
{
|
||||
auto i = foo1(i); // { dg-error "before deduction" }
|
||||
}
|
||||
|
||||
struct A {};
|
||||
|
||||
A foo2(A);
|
||||
|
||||
void bar2()
|
||||
{
|
||||
auto a = foo2(a); // { dg-error "before deduction" }
|
||||
}
|
Loading…
Reference in New Issue