compiler: use int type for len & cap in slice value

Slice value expression has backend type a struct of a pointer and
    two ints. Make sure the len and cap are converted to int when
    creating slice value expression.
    
    Reviewed-on: https://go-review.googlesource.com/c/156897

From-SVN: r267745
This commit is contained in:
Ian Lance Taylor 2019-01-09 00:05:12 +00:00
parent 52af30719f
commit fc490e0478
2 changed files with 5 additions and 3 deletions

View File

@ -1,4 +1,4 @@
085ef4556ec810a5a9c422e7b86d98441dc92e86 960637781ca9546ea2db913e48afd7eccbdadfa9
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -7821,8 +7821,10 @@ Builtin_call_expression::lower_make(Statement_inserter* inserter)
cap_arg); cap_arg);
mem = Expression::make_unsafe_cast(Type::make_pointer_type(et), mem, mem = Expression::make_unsafe_cast(Type::make_pointer_type(et), mem,
loc); loc);
call = Expression::make_slice_value(type, mem, len_arg->copy(), Type* int_type = Type::lookup_integer_type("int");
cap_arg->copy(), loc); len_arg = Expression::make_cast(int_type, len_arg->copy(), loc);
cap_arg = Expression::make_cast(int_type, cap_arg->copy(), loc);
call = Expression::make_slice_value(type, mem, len_arg, cap_arg, loc);
} }
else if (is_map) else if (is_map)
{ {