From: jason Date: Mon, 16 Jan 2012 21:32:14 +0000 (+0000) Subject: PR c++/51854 X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=193dc72f96cf0acfbcf26667b495adcd58bbc0ff;ds=sidebyside PR c++/51854 * mangle.c (write_template_arg_literal): Handle complex. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183222 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e3ef5f2e813..e90f8331204 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2012-01-16 Jakub Jelinek + + PR c++/51854 + * mangle.c (write_template_arg_literal): Handle complex. + 2012-01-16 Jason Merrill PR c++/51827 diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 15b1aca09f5..34f19efc42e 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -2927,6 +2927,25 @@ write_template_arg_literal (const tree value) write_real_cst (value); break; + case COMPLEX_CST: + if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST + && TREE_CODE (TREE_IMAGPART (value)) == INTEGER_CST) + { + write_integer_cst (TREE_REALPART (value)); + write_char ('_'); + write_integer_cst (TREE_IMAGPART (value)); + } + else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST + && TREE_CODE (TREE_IMAGPART (value)) == REAL_CST) + { + write_real_cst (TREE_REALPART (value)); + write_char ('_'); + write_real_cst (TREE_IMAGPART (value)); + } + else + gcc_unreachable (); + break; + case STRING_CST: sorry ("string literal in function template signature"); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9fa8e43365f..af5f550b839 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2012-01-16 Jason Merrill + PR c++/51854 + * g++.dg/abi/mangle60.C: New. + PR c++/51827 * g++.dg/pch/mangle1.{C,Hs}: New. diff --git a/gcc/testsuite/g++.dg/abi/mangle60.C b/gcc/testsuite/g++.dg/abi/mangle60.C new file mode 100644 index 00000000000..f7e893a558a --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle60.C @@ -0,0 +1,20 @@ +// PR c++/51854 +// { dg-options "" } + +template struct A; + +template +char foo(U, V); + +// { dg-final { scan-assembler "_Z3barIiEvP1AIXszcl3foocvT__ELCi0_42EEEE" } } +template +void bar(A *); + +// { dg-final { scan-assembler "_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE" } } +template +void baz(A *); + +int main() { + bar(0); + baz(0); +}