Skip to content
Snippets Groups Projects
Commit ea8ffdca authored by Iain Buclaw's avatar Iain Buclaw
Browse files

d: Fix ICE: verify_gimple_failed (conversion of register to a different size...

d: Fix ICE: verify_gimple_failed (conversion of register to a different size in 'view_convert_expr')

Static arrays in D are passed around by value, rather than decaying to a
pointer.  On x86_64 __builtin_va_list is an exception to this rule, but
semantically it's still treated as a static array.

This makes certain assignment operations fail due a mismatch in types.
As all examples in the test program are rejected by C/C++ front-ends,
these are now errors in D too to be consistent.

	PR d/110712

gcc/d/ChangeLog:

	* d-codegen.cc (d_build_call): Update call to convert_for_argument.
	* d-convert.cc (is_valist_parameter_type): New function.
	(check_valist_conversion): New function.
	(convert_for_assignment): Update signature.  Add check whether
	assigning va_list is permissible.
	(convert_for_argument): Likewise.
	* d-tree.h (convert_for_assignment): Update signature.
	(convert_for_argument): Likewise.
	* expr.cc (ExprVisitor::visit (AssignExp *)): Update call to
	convert_for_assignment.

gcc/testsuite/ChangeLog:

	* gdc.dg/pr110712.d: New test.
parent e773c6c7
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment