Commit 1200933c by Paolo Carlini Committed by Paolo Carlini

re PR c++/58561 ([c++11] ICE using declaration of function with auto in return type)

2014-01-29  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/58561
	* dwarf2out.c (is_cxx_auto): New.
	(is_base_type): Use it.
	(gen_type_die_with_usage): Likewise.

/testsuite
2014-01-29  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/58561
	* g++.dg/cpp1y/auto-fn23.C: New.

From-SVN: r207282
parent 7651c656
2014-01-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58561
* dwarf2out.c (is_cxx_auto): New.
(is_base_type): Use it.
(gen_type_die_with_usage): Likewise.
2014-01-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Use
......
......@@ -10219,6 +10219,23 @@ base_type_die (tree type)
return base_type_result;
}
/* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
named 'auto' in its type: return true for it, false otherwise. */
static inline bool
is_cxx_auto (tree type)
{
if (is_cxx ())
{
tree name = TYPE_NAME (type);
if (TREE_CODE (name) == TYPE_DECL)
name = DECL_NAME (name);
if (name == get_identifier ("auto"))
return true;
}
return false;
}
/* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
given input type is a Dwarf "fundamental" type. Otherwise return null. */
......@@ -10252,6 +10269,8 @@ is_base_type (tree type)
return 0;
default:
if (is_cxx_auto (type))
return 0;
gcc_unreachable ();
}
......@@ -19830,24 +19849,16 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
break;
default:
// A C++ function with deduced return type can have
// a TEMPLATE_TYPE_PARM named 'auto' in its type.
if (is_cxx ())
if (is_cxx_auto (type))
{
tree name = TYPE_NAME (type);
if (TREE_CODE (name) == TYPE_DECL)
name = DECL_NAME (name);
if (name == get_identifier ("auto"))
if (!auto_die)
{
if (!auto_die)
{
auto_die = new_die (DW_TAG_unspecified_type,
comp_unit_die (), NULL_TREE);
add_name_attribute (auto_die, "auto");
}
equate_type_number_to_die (type, auto_die);
break;
auto_die = new_die (DW_TAG_unspecified_type,
comp_unit_die (), NULL_TREE);
add_name_attribute (auto_die, "auto");
}
equate_type_number_to_die (type, auto_die);
break;
}
gcc_unreachable ();
}
......
2014-01-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58561
* g++.dg/cpp1y/auto-fn23.C: New.
2014-01-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58846
* g++.dg/init/dso_handle2.C: New.
......
// PR c++/58561
// { dg-options "-std=c++1y -g" }
auto foo();
namespace N
{
using ::foo;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment