On June 27, 2019 7:04:32 PM GMT+02:00, Jakub Jelinek <ja...@redhat.com> wrote:
>On Thu, Jun 27, 2019 at 10:58:25AM -0600, Martin Sebor wrote:
>> The LHS is unsigned short so handle_char_store would not be called
>> because of the check in the caller.  You would need something like:
>> 
>>   MEM <char[2]> [(char *)&x] = { 'a', 'b' };
>
>This is invalid, because the rhs is non-empty CONSTRUCTOR that doesn't
>have
>VECTOR_TYPE - verify_gimple_assign_single has:
>    case CONSTRUCTOR:
>      if (TREE_CODE (rhs1_type) == VECTOR_TYPE)
>...
>      else if (CONSTRUCTOR_NELTS (rhs1) != 0)
>        {
>          error ("non-vector %qs with elements", code_name);
>          debug_generic_stmt (rhs1);
>          return true;
>        }
>
>But
>  MEM <char[2]> [(char *)&x] = MEM <char[2]> [(char *)"ab"];
>is valid.  Or = {} would be valid too, even for array stores.

And you can of course write GIMPLE unit tests for the pass using the GIMPLE FE. 

Richard. 

>       Jakub

Reply via email to