[flang] Change parse tree to allow DO loop over REAL
authorTim Keith <tkeith@nvidia.com>
Thu, 9 May 2019 15:32:27 +0000 (08:32 -0700)
committerTim Keith <tkeith@nvidia.com>
Thu, 9 May 2019 15:33:28 +0000 (08:33 -0700)
commit351dc98948b972f6e21843dd414552f5b2cb9db3
tree83b76b75dd2436780dbf68a166d69dfe52ba88d0
parentea38f1ef5ed378944914905d2d5a88b905762d4f
[flang] Change parse tree to allow DO loop over REAL

It is a common extension to allow DO loops with REAL variable and
bounds. The parse tree currently parses those with the variable
as `scalar-int-variable-name` and the bounds as `scalar-int-expr`.
That causes the INTEGER constraint to be enforced automatically.

Change the grammar and parse tree to treat them as `scalar-variable-name`
and `scalar-expr`. This allows the name and expression to be REAL,
but we will have to verify that they aren't any other type (in a future
change).

To accomplish this, add a template parameter to `LoopBounds` for the type
of the variable name (always `Scalar<Name>` or `Scalar<Integer<Name>>`).
We sometimes need names for the instantiations of `LoopBounds` so add
type aliases like `LoopControl::Bounds` for each one.

Original-commit: flang-compiler/f18@d75aa039701186584d46f0126dcdc1186515a058
Reviewed-on: https://github.com/flang-compiler/f18/pull/455
Tree-same-pre-rewrite: false
flang/lib/FIR/afforestation.cc
flang/lib/parser/dump-parse-tree.h
flang/lib/parser/grammar.h
flang/lib/parser/parse-tree-visitor.h
flang/lib/parser/parse-tree.h
flang/lib/parser/unparse.cc
flang/lib/semantics/expression.cc
flang/lib/semantics/resolve-names.cc