Commit 95875a9b by Jakub Jelinek Committed by Jason Merrill

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
parent a7cd72be
2012-01-16 Jakub Jelinek <jakub@redhat.com>
PR c++/51854
* mangle.c (write_template_arg_literal): Handle complex.
2012-01-16 Jason Merrill <jason@redhat.com>
PR c++/51827
......
......@@ -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;
......
2012-01-16 Jason Merrill <jason@redhat.com>
PR c++/51854
* g++.dg/abi/mangle60.C: New.
PR c++/51827
* g++.dg/pch/mangle1.{C,Hs}: New.
......
// PR c++/51854
// { dg-options "" }
template <unsigned N> struct A;
template <typename U, typename V>
char foo(U, V);
// { dg-final { scan-assembler "_Z3barIiEvP1AIXszcl3foocvT__ELCi0_42EEEE" } }
template <typename U>
void bar(A<sizeof(foo(U(), 42i))> *);
// { dg-final { scan-assembler "_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE" } }
template <typename U>
void baz(A<sizeof(foo(U(), 0.0fj))> *);
int main() {
bar<int>(0);
baz<int>(0);
}
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