compiler: update iota handling, fix using iota in array length
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 5 Feb 2018 01:57:42 +0000 (01:57 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 5 Feb 2018 01:57:42 +0000 (01:57 +0000)
commit5dfb4d0f3339595881fba857ab5a4b57c681a8e3
tree336c1452068533453093114132ffd040f836b06a
parent33cdac3baa9e0c8da598d5124ac9196be30a3ccb
compiler: update iota handling, fix using iota in array length

    CL 71750 changed the definition of how iota works.  This patch updates
    gccgo for the new definition.

    We've been mishandling iota appearing in a type that appears in a
    const expression, as in `c = len([iota]int{})`.  Correct that by copying
    type expressions when we copy an expression.  For simplicity only copy
    when it can change the size of a type, as that is the only case where
    iota in a type can affect the value of a constant (I think).  This is
    still a bunch of changes, but almost all boilerplate.

    Fixes golang/go#22341

    Reviewed-on: https://go-review.googlesource.com/91475

From-SVN: r257379
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/expressions.h
gcc/go/gofrontend/parse.cc
gcc/go/gofrontend/parse.h
gcc/go/gofrontend/types.cc
gcc/go/gofrontend/types.h