summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-09 21:24:00 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-09 21:24:00 +0000
commit9c4ff2ce65bdae101233b00405f81b0c657b9a23 (patch)
tree4a33dc3570b0216cf7209e5e31a7f9bdb1f8a647
parent1823d5ff98404367f5f7fd2585f0761f31f6f553 (diff)
downloadgcc-9c4ff2ce65bdae101233b00405f81b0c657b9a23.tar.gz
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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@251006 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/expressions.cc2
2 files changed, 2 insertions, 2 deletions
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;