aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch3.adb
diff options
context:
space:
mode:
authorMarc Poulhiès <poulhies@adacore.com>2023-09-08 15:15:48 +0000
committerMarc Poulhiès <poulhies@adacore.com>2023-09-19 13:26:42 +0200
commit047269320d433e4024fcb3580f638bcb2aca7664 (patch)
tree0734467aac08433e2acd7b56df0b41df00e833ca /gcc/ada/sem_ch3.adb
parent54c16824f0f05313bfc7df5e625f108b4ff7c636 (diff)
downloadgcc-047269320d433e4024fcb3580f638bcb2aca7664.zip
gcc-047269320d433e4024fcb3580f638bcb2aca7664.tar.gz
gcc-047269320d433e4024fcb3580f638bcb2aca7664.tar.bz2
ada: Refine upper array bound for bit packed array
When using bit-packed arrays, the compiler creates new array subtypes of 1-bit component indexed by integers. The existing routine checks the index subtype to find the min/max values. Bit-packed arrays being indexed by integers, the routines gives up as returning the maximum possible integer carries no useful information. This change adds a simple max_value routine that can evaluate very simple expressions by substituting variables by their min/max value. Bit-packed array subtypes are currently declared as: subtype bp_array is packed_bytes1 (0 .. integer((1 * Var + 7) / 8 - 1)); The simple max_value evaluator handles the bare minimum for this expression pattern. gcc/ada/ChangeLog: * gcc-interface/utils.cc (max_value): New. * gcc-interface/gigi.h (max_value): New. * gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Array_Subtype>: When computing gnu_min/gnu_max, try to use max_value if there is an initial expression.
Diffstat (limited to 'gcc/ada/sem_ch3.adb')
0 files changed, 0 insertions, 0 deletions