mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-12 08:09:38 +08:00
re PR c++/13883 (Assembler messages: symbol is already defined)
PR c++/13883 * mangle.c (write_encoding): Correct encoding of member template constructors. PR c++/13883 * g++.dg/template/ctor3.C: New test. From-SVN: r76868
This commit is contained in:
parent
8cfb19429f
commit
4a5e0ed992
@ -1,3 +1,9 @@
|
||||
2004-01-29 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13883
|
||||
* mangle.c (write_encoding): Correct encoding of member template
|
||||
constructors.
|
||||
|
||||
2004-01-28 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
* parser.c (cp_parser_template_id): Parse tentatively `[:' after a
|
||||
|
@ -688,18 +688,29 @@ write_encoding (const tree decl)
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
{
|
||||
tree fn_type;
|
||||
tree d;
|
||||
|
||||
if (decl_is_template_id (decl, NULL))
|
||||
fn_type = get_mostly_instantiated_function_type (decl);
|
||||
{
|
||||
fn_type = get_mostly_instantiated_function_type (decl);
|
||||
/* FN_TYPE will not have parameter types for in-charge or
|
||||
VTT parameters. Therefore, we pass NULL_TREE to
|
||||
write_bare_function_type -- otherwise, it will get
|
||||
confused about which artificial parameters to skip. */
|
||||
d = NULL_TREE;
|
||||
}
|
||||
else
|
||||
fn_type = TREE_TYPE (decl);
|
||||
{
|
||||
fn_type = TREE_TYPE (decl);
|
||||
d = decl;
|
||||
}
|
||||
|
||||
write_bare_function_type (fn_type,
|
||||
(!DECL_CONSTRUCTOR_P (decl)
|
||||
&& !DECL_DESTRUCTOR_P (decl)
|
||||
&& !DECL_CONV_FN_P (decl)
|
||||
&& decl_is_template_id (decl, NULL)),
|
||||
decl);
|
||||
d);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-01-29 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13883
|
||||
* g++.dg/template/ctor3.C: New test.
|
||||
|
||||
2004-01-29 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
* g++.dg/tc1: New directory.
|
||||
|
19
gcc/testsuite/g++.dg/template/ctor3.C
Normal file
19
gcc/testsuite/g++.dg/template/ctor3.C
Normal file
@ -0,0 +1,19 @@
|
||||
struct A {};
|
||||
struct B;
|
||||
|
||||
template <class TP> struct X: virtual A {
|
||||
template <class TP2> X(TP2* ptr) {}
|
||||
template <class TP2> X(const X<TP2>) {}
|
||||
};
|
||||
|
||||
struct Y : X<B> {
|
||||
Y(A* a) : X<B>(a) {}
|
||||
};
|
||||
|
||||
void func1(X<B>);
|
||||
|
||||
void func2() {
|
||||
A a;
|
||||
Y y(&a);
|
||||
func1(X<A>(&a));
|
||||
}
|
Loading…
Reference in New Issue
Block a user