Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
4e9a8214
Commit
4e9a8214
authored
Sep 17, 2015
by
Eric Botcazou
Committed by
Eric Botcazou
Sep 17, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* gcc-interface/trans.c (emit_check): Do not touch TREE_SIDE_EFFECTS.
From-SVN: r227879
parent
310055e7
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
47 additions
and
17 deletions
+47
-17
gcc/ada/ChangeLog
+4
-0
gcc/ada/gcc-interface/trans.c
+20
-17
gcc/testsuite/ChangeLog
+4
-0
gcc/testsuite/gnat.dg/overflow_sum3.adb
+19
-0
No files found.
gcc/ada/ChangeLog
View file @
4e9a8214
2015
-
09
-
17
Eric
Botcazou
<
ebotcazou
@
adacore
.
com
>
*
gcc
-
interface
/
trans
.
c
(
emit_check
):
Do
not
touch
TREE_SIDE_EFFECTS
.
2015
-
09
-
14
Pierre
-
Marie
de
Rodat
<
derodat
@
adacore
.
com
>
*
gcc
-
interface
/
misc
.
c
(
gnat_post_options
):
Issue
a
warning
if
...
...
gcc/ada/gcc-interface/trans.c
View file @
4e9a8214
...
...
@@ -8798,29 +8798,32 @@ emit_index_check (tree gnu_array_object, tree gnu_expr, tree gnu_low,
gnu_expr
,
CE_Index_Check_Failed
,
gnat_node
);
}
/* GNU_COND contains the condition corresponding to an access, discriminant or
range check of value GNU_EXPR. Build a COND_EXPR that returns GNU_EXPR if
GNU_COND is false and raises a CONSTRAINT_ERROR if GNU_COND is true.
REASON is the code that says why the exception was raised. GNAT_NODE is
the GNAT node conveying the source location for which the error should be
signaled. */
/* GNU_COND contains the condition corresponding to an index, overflow or
range check of value GNU_EXPR. Build a COND_EXPR that returns GNU_EXPR
if GNU_COND is false and raises a CONSTRAINT_ERROR if GNU_COND is true.
REASON is the code that says why the exception is raised. GNAT_NODE is
the node conveying the source location for which the error should be
signaled.
We used to propagate TREE_SIDE_EFFECTS from GNU_EXPR to the COND_EXPR,
overwriting the setting inherited from the call statement, on the ground
that the expression need not be evaluated just for the check. However
that's incorrect because, in the GCC type system, its value is presumed
to be valid so its comparison against the type bounds always yields true
and, therefore, could be done without evaluating it; given that it can
be a computation that overflows the bounds, the language may require the
check to fail and thus the expression to be evaluated in this case. */
static
tree
emit_check
(
tree
gnu_cond
,
tree
gnu_expr
,
int
reason
,
Node_Id
gnat_node
)
{
tree
gnu_call
=
build_call_raise
(
reason
,
gnat_node
,
N_Raise_Constraint_Error
);
tree
gnu_result
=
fold_build3
(
COND_EXPR
,
TREE_TYPE
(
gnu_expr
),
gnu_cond
,
build2
(
COMPOUND_EXPR
,
TREE_TYPE
(
gnu_expr
),
gnu_call
,
convert
(
TREE_TYPE
(
gnu_expr
),
integer_zero_node
)),
gnu_expr
);
/* GNU_RESULT has side effects if and only if GNU_EXPR has:
we don't need to evaluate it just for the check. */
TREE_SIDE_EFFECTS
(
gnu_result
)
=
TREE_SIDE_EFFECTS
(
gnu_expr
);
return
gnu_result
;
return
fold_build3
(
COND_EXPR
,
TREE_TYPE
(
gnu_expr
),
gnu_cond
,
build2
(
COMPOUND_EXPR
,
TREE_TYPE
(
gnu_expr
),
gnu_call
,
convert
(
TREE_TYPE
(
gnu_expr
),
integer_zero_node
)),
gnu_expr
);
}
/* Return an expression that converts GNU_EXPR to GNAT_TYPE, doing overflow
...
...
gcc/testsuite/ChangeLog
View file @
4e9a8214
2015-09-17 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/overflow_sum3.adb: New test.
2015-09-17 Eric Botcazou <ebotcazou@adacore.com>
* gcc.target/arm/stack-checking.c: New test.
2015-09-17 Paul Thomas <pault@gcc.gnu.org>
...
...
gcc/testsuite/gnat.dg/overflow_sum3.adb
0 → 100644
View file @
4e9a8214
-- { dg-do run }
-- { dg-options "-gnato" }
procedure Overflow_Sum3 is
function Ident (I : Integer) return Integer is
begin
return I;
end;
X : Short_Short_Integer := Short_Short_Integer (Ident (127));
begin
if X+1 <= 127 then
raise Program_Error;
end if;
exception
when Constraint_Error => null;
end;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment