Commit 19eec7ac by Ian Lance Taylor

compiler: fix buglet in lshift type determination

    
    It's possible to construct an lshift expression using unsafe.Sizeof
    that is technically a compile-time constant but can't be evaluated
    without going through backend methods. In this case, insure that
    Type::make_non_abstract_type is called on the numeric operand of the
    shift (as opposed to leaving as abstract), to avoid an assert later on
    in the compiler flow.
    
    Fixes golang/go#21372.
    
    Reviewed-on: https://go-review.googlesource.com/54370

From-SVN: r251006
parent cc6a467f
5fd112e5c2968e94761c41519c451d789e23a92b 480fdfa9dd416bd17115a94fa6021c4dd805fc39
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.
...@@ -5655,7 +5655,7 @@ Binary_expression::do_determine_type(const Type_context* context) ...@@ -5655,7 +5655,7 @@ Binary_expression::do_determine_type(const Type_context* context)
Type_context subcontext(*context); Type_context subcontext(*context);
if (is_constant_expr) if (is_constant_expr && !is_shift_op)
{ {
subcontext.type = NULL; subcontext.type = NULL;
subcontext.may_be_abstract = true; subcontext.may_be_abstract = true;
......
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