summaryrefslogtreecommitdiff
path: root/gcc/stor-layout.c
diff options
context:
space:
mode:
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-12-31 08:33:11 +0000
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-12-31 08:33:11 +0000
commita69485e8e2c7f28f56ce5e9982b0fe7c0bc98ee9 (patch)
tree3bdb20bc356115a8f5db66fc0505f853b4e7ac6f /gcc/stor-layout.c
parenta7478f118f03a4f7b1c26c393349f06e89b3c344 (diff)
downloadgcc-a69485e8e2c7f28f56ce5e9982b0fe7c0bc98ee9.tar.gz
(layout_record): Avoid overflow in const_size by adding into var_size instead.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@3007 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/stor-layout.c')
-rw-r--r--gcc/stor-layout.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index e2808020414..3d1ce08e26c 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -451,7 +451,10 @@ layout_record (rec)
printed in finish_struct. */
if (dsize == 0)
/* Do nothing. */;
- else if (TREE_CODE (dsize) == INTEGER_CST)
+ else if (TREE_CODE (dsize) == INTEGER_CST
+ && TREE_INT_CST_HIGH (dsize) == 0
+ && TREE_INT_CST_LOW (dsize) + const_size > const_size)
+ /* Use const_size if there's no overflow. */
const_size += TREE_INT_CST_LOW (dsize);
else
{