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.

Change-Id: Idcc85835566d9da2f3c1ef87b50bbe56de40fafe
Reviewed-on: https://go-review.googlesource.com/54370
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/go/expressions.cc b/go/expressions.cc
index eb23ec2..6f9c1c9 100644
--- a/go/expressions.cc
+++ b/go/expressions.cc
@@ -5655,7 +5655,7 @@
 
   Type_context subcontext(*context);
 
-  if (is_constant_expr)
+  if (is_constant_expr && !is_shift_op)
     {
       subcontext.type = NULL;
       subcontext.may_be_abstract = true;