diff options
author | Olivier Hainque <hainque@adacore.com> | 2009-09-02 12:13:37 +0000 |
---|---|---|
committer | Olivier Hainque <hainque@gcc.gnu.org> | 2009-09-02 12:13:37 +0000 |
commit | 683ebd75535df2238c74cec637724a906bc228df (patch) | |
tree | 1d92be14b5a112780ad63f8695c1a71f6b98e35d /gcc/ada/gcc-interface/decl.c | |
parent | 638381579be16f630292273a23ffc9282906ada9 (diff) | |
download | gcc-683ebd75535df2238c74cec637724a906bc228df.zip gcc-683ebd75535df2238c74cec637724a906bc228df.tar.gz gcc-683ebd75535df2238c74cec637724a906bc228df.tar.bz2 |
decl.c (cannot_be_superflat_p): Handle Signed_Integer_Type_Definition Scalar_Ranges.
ada/
* gcc-interface/decl.c (cannot_be_superflat_p): Handle
Signed_Integer_Type_Definition Scalar_Ranges.
testsuite/
* gnat.dg/array7.ad[bs]: Add check for Signed_Integer_Type_Definition.
From-SVN: r151322
Diffstat (limited to 'gcc/ada/gcc-interface/decl.c')
-rw-r--r-- | gcc/ada/gcc-interface/decl.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 7d96c9a..9d385302 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -5298,21 +5298,27 @@ static bool cannot_be_superflat_p (Node_Id gnat_range) { Node_Id gnat_lb = Low_Bound (gnat_range), gnat_hb = High_Bound (gnat_range); + Node_Id scalar_range; + tree gnu_lb, gnu_hb; /* If the low bound is not constant, try to find an upper bound. */ while (Nkind (gnat_lb) != N_Integer_Literal && (Ekind (Etype (gnat_lb)) == E_Signed_Integer_Subtype || Ekind (Etype (gnat_lb)) == E_Modular_Integer_Subtype) - && Nkind (Scalar_Range (Etype (gnat_lb))) == N_Range) - gnat_lb = High_Bound (Scalar_Range (Etype (gnat_lb))); + && (scalar_range = Scalar_Range (Etype (gnat_lb))) + && (Nkind (scalar_range) == N_Signed_Integer_Type_Definition + || Nkind (scalar_range) == N_Range)) + gnat_lb = High_Bound (scalar_range); /* If the high bound is not constant, try to find a lower bound. */ while (Nkind (gnat_hb) != N_Integer_Literal && (Ekind (Etype (gnat_hb)) == E_Signed_Integer_Subtype || Ekind (Etype (gnat_hb)) == E_Modular_Integer_Subtype) - && Nkind (Scalar_Range (Etype (gnat_hb))) == N_Range) - gnat_hb = Low_Bound (Scalar_Range (Etype (gnat_hb))); + && (scalar_range = Scalar_Range (Etype (gnat_hb))) + && (Nkind (scalar_range) == N_Signed_Integer_Type_Definition + || Nkind (scalar_range) == N_Range)) + gnat_hb = Low_Bound (scalar_range); if (!(Nkind (gnat_lb) == N_Integer_Literal && Nkind (gnat_hb) == N_Integer_Literal)) |