Skip to content
Snippets Groups Projects
  • Iain Buclaw's avatar
    ea8ffdca
    d: Fix ICE: verify_gimple_failed (conversion of register to a different size... · ea8ffdca
    Iain Buclaw authored
    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.
    ea8ffdca
    History
    d: Fix ICE: verify_gimple_failed (conversion of register to a different size...
    Iain Buclaw authored
    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.