From: Jakub Jelinek Date: Mon, 16 Jan 2012 21:32:14 +0000 (-0500) Subject: re PR c++/51854 (ICE in mangle.c with literal of complex floating type) X-Git-Tag: releases/gcc-4.7.0~972 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=95875a9b23ef741f0f0486c67bf4ded4b0c90983;p=thirdparty%2Fgcc.git re PR c++/51854 (ICE in mangle.c with literal of complex floating type) PR c++/51854 * mangle.c (write_template_arg_literal): Handle complex. From-SVN: r183222 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e3ef5f2e8132..e90f83312045 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 15b1aca09f55..34f19efc42e0 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 9fa8e43365f2..af5f550b839d 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 000000000000..f7e893a558a9 --- /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); +}