re PR c++/48008 (libstdc++-v3/testsuite/20_util/function/43397.cc fails to assemble with -fabi-version=5)

PR c++/48008
	* mangle.c (write_type): Strip cv-quals from FUNCTION_TYPE here.
	(write_CV_qualifiers_for_type): Not here.

From-SVN: r170752
This commit is contained in:
Jason Merrill 2011-03-07 15:10:44 -05:00 committed by Jason Merrill
parent 43070a6e9b
commit 2706260492
4 changed files with 41 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2011-03-07 Jason Merrill <jason@redhat.com>
PR c++/48008
* mangle.c (write_type): Strip cv-quals from FUNCTION_TYPE here.
(write_CV_qualifiers_for_type): Not here.
2011-03-06 Joseph Myers <joseph@codesourcery.com>
* lang-specs.h: Match -save-temps* instead of -save-temps.

View File

@ -1880,16 +1880,25 @@ write_type (tree type)
break;
case POINTER_TYPE:
write_char ('P');
write_type (TREE_TYPE (type));
break;
case REFERENCE_TYPE:
if (TYPE_REF_IS_RVALUE (type))
write_char('O');
if (TREE_CODE (type) == POINTER_TYPE)
write_char ('P');
else if (TYPE_REF_IS_RVALUE (type))
write_char ('O');
else
write_char ('R');
write_type (TREE_TYPE (type));
{
tree target = TREE_TYPE (type);
/* Attribute const/noreturn are not reflected in mangling.
We strip them here rather than at a lower level because
a typedef or template argument can have function type
with function-cv-quals (that use the same representation),
but you can't have a pointer/reference to such a type. */
if (abi_version_at_least (5)
&& TREE_CODE (target) == FUNCTION_TYPE)
target = build_qualified_type (target, TYPE_UNQUALIFIED);
write_type (target);
}
break;
case TEMPLATE_TYPE_PARM:
@ -2017,12 +2026,6 @@ write_CV_qualifiers_for_type (const tree type)
array. */
cp_cv_quals quals = TYPE_QUALS (type);
/* Attribute const/noreturn are not reflected in mangling. */
if (abi_version_at_least (5)
&& (TREE_CODE (type) == FUNCTION_TYPE
|| TREE_CODE (type) == METHOD_TYPE))
return 0;
if (quals & TYPE_QUAL_RESTRICT)
{
write_char ('r');

View File

@ -1,3 +1,7 @@
2011-03-07 Jason Merrill <jason@redhat.com>
* g++.dg/abi/mangle46.C: New.
2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
PR target/47862

View File

@ -0,0 +1,15 @@
// PR c++/48008
// { dg-options -fabi-version=5 }
// Test that we retain function-cv-quals in template argument mangling.
template <class T>
struct A
{ };
typedef void cfn(int) const;
typedef void fn(int);
// { dg-final { scan-assembler "_Z1f1AIFviEE" } }
void f(A<fn>) { }
// { dg-final { scan-assembler "_Z1f1AIKFviEE" } }
void f(A<cfn>) { }