summaryrefslogtreecommitdiff
path: root/gcc/ada/sem_eval.adb
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-25 20:52:28 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-25 20:52:28 +0000
commit536f5fb115792c70f4e8e459454a9aaeb83cb8f4 (patch)
tree8c35b0cf468101ecc396f5eb7631e99dc328e79c /gcc/ada/sem_eval.adb
parentcb6b7c90629c20399ced93bb7ef0ee60ec166e80 (diff)
downloadgcc-536f5fb115792c70f4e8e459454a9aaeb83cb8f4.tar.gz
* toplev.c: Don't include setjmp.h. Kill float_handler_set,
float_handled, float_handler, float_signal, set_float_handler, and do_float_handler. Set handler for SIGFPE to crash_signal. * toplev.h: Don't prototype do_float_handler. * c-lex.c: Fold parse_float into lex_number. Make warning about portability of hex float constants more informative, and don't issue it on top of a syntax error. * fold-const.c: Fold const_binop_1 and fold_convert_1 into their callers. * real.h: Define REAL_VALUE_ABS here... * simplify-rtx.c: ... not here. Fold check_fold_consts, simplify_unary_real, simplify_binary_real, and simplify_binary_is2orm1 into their callers. * tree.c: Fold build_real_from_int_cst_1 into caller. * doc/tm.texi: Document REAL_VALUE_ABS and REAL_VALUE_NEGATIVE. * tsystem.h: Include float.h here... * libgcc2.c: ... not here. java: * lex.c: Change java_perform_atof to take normal parameters instead of a pointer to a parameter block. Call it directly from java_lex. testsuite: * gcc.dg/c90-hexfloat-1.c: Adjust error regexps. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51336 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem_eval.adb')
-rw-r--r--gcc/ada/sem_eval.adb14
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index 7d90e531cc4..0b910a63aac 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -921,20 +921,28 @@ package body Sem_Eval is
declare
Arr : constant Node_Id := Constant_Value (Entity (Prefix (Op)));
Sub : constant Node_Id := First (Expressions (Op));
- Ind : constant Node_Id := First_Index (Etype (Arr));
- Lbd : constant Node_Id := Type_Low_Bound (Etype (Ind));
+ Aty : constant Node_Id := Etype (Arr);
Lin : Nat;
-- Linear one's origin subscript value for array reference
+ Lbd : Node_Id;
+ -- Lower bound of the first array index
+
Elm : Node_Id;
-- Value from constant array
begin
+ if Ekind (Aty) = E_String_Literal_Subtype then
+ Lbd := String_Literal_Low_Bound (Aty);
+ else
+ Lbd := Type_Low_Bound (Etype (First_Index (Aty)));
+ end if;
+
if Compile_Time_Known_Value (Sub)
and then Nkind (Arr) = N_Aggregate
and then Compile_Time_Known_Value (Lbd)
- and then Is_Discrete_Type (Component_Type (Etype (Arr)))
+ and then Is_Discrete_Type (Component_Type (Aty))
then
Lin := UI_To_Int (Expr_Value (Sub) - Expr_Value (Lbd)) + 1;