Commit 27062604 by Jason Merrill Committed by Jason Merrill

re PR c++/48008 (libstdc++-v3/testsuite/20_util/function/43397.cc fails to…

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
parent 43070a6e
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> 2011-03-06 Joseph Myers <joseph@codesourcery.com>
* lang-specs.h: Match -save-temps* instead of -save-temps. * lang-specs.h: Match -save-temps* instead of -save-temps.
......
...@@ -1880,16 +1880,25 @@ write_type (tree type) ...@@ -1880,16 +1880,25 @@ write_type (tree type)
break; break;
case POINTER_TYPE: case POINTER_TYPE:
write_char ('P');
write_type (TREE_TYPE (type));
break;
case REFERENCE_TYPE: case REFERENCE_TYPE:
if (TYPE_REF_IS_RVALUE (type)) if (TREE_CODE (type) == POINTER_TYPE)
write_char('O'); write_char ('P');
else if (TYPE_REF_IS_RVALUE (type))
write_char ('O');
else else
write_char ('R'); 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; break;
case TEMPLATE_TYPE_PARM: case TEMPLATE_TYPE_PARM:
...@@ -2017,12 +2026,6 @@ write_CV_qualifiers_for_type (const tree type) ...@@ -2017,12 +2026,6 @@ write_CV_qualifiers_for_type (const tree type)
array. */ array. */
cp_cv_quals quals = TYPE_QUALS (type); 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) if (quals & TYPE_QUAL_RESTRICT)
{ {
write_char ('r'); write_char ('r');
......
2011-03-07 Jason Merrill <jason@redhat.com>
* g++.dg/abi/mangle46.C: New.
2011-03-07 Pat Haugen <pthaugen@us.ibm.com> 2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
PR target/47862 PR target/47862
......
// 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>) { }
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