mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 23:41:28 +08:00
re PR c++/38597 ([c++0x] ICE when auto return type function given as argument to function template)
PR c++/38597 * name-lookup.c (arg_assoc_type): Handle DECLTYPE_TYPE. From-SVN: r142868
This commit is contained in:
parent
aad9c4f437
commit
3feb128fad
@ -1,3 +1,8 @@
|
||||
2008-12-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/38597
|
||||
* name-lookup.c (arg_assoc_type): Handle DECLTYPE_TYPE.
|
||||
|
||||
2008-12-20 Jakub Jelinek <jakub@redhat.com>
|
||||
Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
|
@ -2348,12 +2348,12 @@ write_expression (tree expr)
|
||||
|
||||
case CAST_EXPR:
|
||||
write_type (TREE_TYPE (expr));
|
||||
/* There is no way to mangle a zero-operand cast like
|
||||
"T()". */
|
||||
if (!TREE_OPERAND (expr, 0))
|
||||
/* "T()" is mangled as "T(void)". */
|
||||
write_char ('v');
|
||||
sorry ("zero-operand casts cannot be mangled due to a defect "
|
||||
"in the C++ ABI");
|
||||
else if (list_length (TREE_OPERAND (expr, 0)) > 1)
|
||||
/* FIXME the above hack for T() needs to be replaced with
|
||||
something more general. */
|
||||
sorry ("mangling function-style cast with more than one argument");
|
||||
else
|
||||
write_expression (TREE_VALUE (TREE_OPERAND (expr, 0)));
|
||||
|
@ -4701,6 +4701,7 @@ arg_assoc_type (struct arg_lookup *k, tree type)
|
||||
case VECTOR_TYPE:
|
||||
case BOOLEAN_TYPE:
|
||||
case FIXED_POINT_TYPE:
|
||||
case DECLTYPE_TYPE:
|
||||
return false;
|
||||
case RECORD_TYPE:
|
||||
if (TYPE_PTRMEMFUNC_P (type))
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-12-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/38597
|
||||
* g++.dg/cpp0x/auto13.C: New test.
|
||||
|
||||
2008-12-20 Jakub Jelinek <jakub@redhat.com>
|
||||
Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
|
11
gcc/testsuite/g++.dg/cpp0x/auto13.C
Normal file
11
gcc/testsuite/g++.dg/cpp0x/auto13.C
Normal file
@ -0,0 +1,11 @@
|
||||
// PR c++/38597
|
||||
// { dg-options "-std=c++0x" }
|
||||
|
||||
template<class T, class U>
|
||||
auto f(T,U) -> decltype(T() + U())
|
||||
{ return T() + U(); }
|
||||
|
||||
template<class T> void g(T){}
|
||||
|
||||
int main() { g(f); } // { dg-error "no matching function" }
|
||||
|
Loading…
x
Reference in New Issue
Block a user