mangle.c (find_substitution): Look for abi_tag on class templates.

gcc/cp:
	* mangle.c (find_substitution): Look for abi_tag on class templates.

gcc/testsuite:
	* g++.dg/abi/abi-tag11.C: New.

From-SVN: r217557
This commit is contained in:
Jonathan Wakely 2014-11-14 12:02:09 +00:00 committed by Jonathan Wakely
parent c7274165bd
commit cbe4c88c5e
4 changed files with 21 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2014-11-14 Jonathan Wakely <jwakely@redhat.com>
* mangle.c (find_substitution): Look for abi_tag on class templates.
2014-11-13 Bernd Schmidt <bernds@codesourcery.com>
Thomas Schwinge <thomas@codesourcery.com>
Ilya Verbin <ilya.verbin@intel.com>

View File

@ -609,7 +609,7 @@ find_substitution (tree node)
}
tree tags = NULL_TREE;
if (OVERLOAD_TYPE_P (node))
if (OVERLOAD_TYPE_P (node) || DECL_CLASS_TEMPLATE_P (node))
tags = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (type));
/* Now check the list of available substitutions for this mangling
operation. */

View File

@ -1,3 +1,7 @@
2014-11-14 Jonathan Wakely <jwakely@redhat.com>
* g++.dg/abi/abi-tag11.C: New.
2014-11-14 Marek Polacek <polacek@redhat.com>
* c-c++-common/ubsan/overflow-negate-3.c: New test.

View File

@ -0,0 +1,12 @@
// { dg-final { scan-assembler "_Z1fSbB3fooIwSt11char_traitsIwESaIwEES3_" } }
namespace std {
template <class T> struct char_traits {};
template <class T> struct allocator {};
template <class T, class U, class V>
struct __attribute ((abi_tag ("foo"))) basic_string { };
typedef basic_string<wchar_t,char_traits<wchar_t>,allocator<wchar_t> >
wstring;
}
void f(std::wstring,std::wstring) {}