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
17651386
Commit
17651386
authored
Sep 11, 1992
by
Richard Stallman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(build_binary_op): When checking shift widths, don't assume target integer
fits in a HOST_WIDE_INT. From-SVN: r2106
parent
2d724389
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
17 deletions
+28
-17
gcc/c-typeck.c
+28
-17
No files found.
gcc/c-typeck.c
View file @
17651386
...
...
@@ -2347,12 +2347,17 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
{
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
)
{
if
(
TREE_INT_CST_LOW
(
op1
)
>
0
)
short_shift
=
1
;
else
if
(
TREE_INT_CST_LOW
(
op1
)
<
0
)
if
(
tree_int_cst_lt
(
op1
,
integer_zero_node
))
warning
(
"shift count is negative"
);
if
(
TREE_INT_CST_LOW
(
op1
)
>=
TYPE_PRECISION
(
type0
))
warning
(
"shift count >= width of type"
);
else
{
if
(
TREE_INT_CST_LOW
(
op1
)
|
TREE_INT_CST_HIGH
(
op1
))
short_shift
=
1
;
if
(
TREE_INT_CST_HIGH
(
op1
)
!=
0
||
((
unsigned
HOST_WIDE_INT
)
TREE_INT_CST_LOW
(
op1
)
>=
TYPE_PRECISION
(
type0
)))
warning
(
"shift count >= width of type"
);
}
}
/* Use the type of the value to be shifted.
This is what most traditional C compilers do. */
...
...
@@ -2372,12 +2377,15 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
case
LSHIFT_EXPR
:
if
(
code0
==
INTEGER_TYPE
&&
code1
==
INTEGER_TYPE
)
{
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
&&
TREE_INT_CST_LOW
(
op1
)
<
0
)
warning
(
"shift count is negative"
);
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
&&
TREE_INT_CST_LOW
(
op1
)
>=
TYPE_PRECISION
(
type0
))
warning
(
"shift count >= width of type"
);
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
)
{
if
(
tree_int_cst_lt
(
op1
,
integer_zero_node
))
warning
(
"shift count is negative"
);
else
if
(
TREE_INT_CST_HIGH
(
op1
)
!=
0
||
((
unsigned
HOST_WIDE_INT
)
TREE_INT_CST_LOW
(
op1
)
>=
TYPE_PRECISION
(
type0
)))
warning
(
"shift count >= width of type"
);
}
/* Use the type of the value to be shifted.
This is what most traditional C compilers do. */
result_type
=
type0
;
...
...
@@ -2397,12 +2405,15 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
case
LROTATE_EXPR
:
if
(
code0
==
INTEGER_TYPE
&&
code1
==
INTEGER_TYPE
)
{
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
&&
TREE_INT_CST_LOW
(
op1
)
<
0
)
warning
(
"shift count is negative"
);
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
&&
TREE_INT_CST_LOW
(
op1
)
>=
TYPE_PRECISION
(
type0
))
warning
(
"shift count >= width of type"
);
if
(
TREE_CODE
(
op1
)
==
INTEGER_CST
)
{
if
(
tree_int_cst_lt
(
op1
,
integer_zero_node
))
warning
(
"shift count is negative"
);
else
if
(
TREE_INT_CST_HIGH
(
op1
)
!=
0
||
((
unsigned
HOST_WIDE_INT
)
TREE_INT_CST_LOW
(
op1
)
>=
TYPE_PRECISION
(
type0
)))
warning
(
"shift count >= width of type"
);
}
/* Use the type of the value to be shifted.
This is what most traditional C compilers do. */
result_type
=
type0
;
...
...
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