From: Ian Lance Taylor Date: Wed, 9 Aug 2017 21:24:00 +0000 (+0000) Subject: compiler: fix buglet in lshift type determination X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=19eec7ac5f73e7fc9eee97438bd5cbdcd07072c2;p=gcc.git 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 --- diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 4fe569ccd73..c5ecb102c7e 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -5fd112e5c2968e94761c41519c451d789e23a92b +480fdfa9dd416bd17115a94fa6021c4dd805fc39 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index eb23ec26ecf..6f9c1c96c3f 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -5655,7 +5655,7 @@ Binary_expression::do_determine_type(const Type_context* context) Type_context subcontext(*context); - if (is_constant_expr) + if (is_constant_expr && !is_shift_op) { subcontext.type = NULL; subcontext.may_be_abstract = true;