This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fold arithmetic integer expressions fallout


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=769553e65f6ea5829edab1e70fd54b058435d85f

commit 769553e65f6ea5829edab1e70fd54b058435d85f
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Oct 7 22:54:45 2016 +1030

    Fold arithmetic integer expressions fallout
    
    	* ldexp.c (MAX): Define.
    	(exp_unop, exp_binop, exp_trinop): Alloc at least enough for
    	etree_type.value.

Diff:
---
 ld/ChangeLog |  6 ++++++
 ld/ldexp.c   | 14 ++++++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 7be0a2a..6fb93bc 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,11 @@
 2016-10-07  Alan Modra  <amodra@gmail.com>
 
+	* ldexp.c (MAX): Define.
+	(exp_unop, exp_binop, exp_trinop): Alloc at least enough for
+	etree_type.value.
+
+2016-10-07  Alan Modra  <amodra@gmail.com>
+
 	* testsuite/lib/ld-lib.exp (is_generic_elf): New, extracted from..
 	* testsuite/ld-elf/elf.exp: ..here.
 
diff --git a/ld/ldexp.c b/ld/ldexp.c
index a5931fd..b2c7620 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -1273,11 +1273,13 @@ exp_value_fold (etree_type *tree)
     }
 }
 
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
 etree_type *
 exp_binop (int code, etree_type *lhs, etree_type *rhs)
 {
-  etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->binary));
-
+  etree_type *new_e = (etree_type *) stat_alloc (MAX (sizeof (new_e->binary),
+						      sizeof (new_e->value)));
   new_e->type.node_code = code;
   new_e->type.filename = lhs->type.filename;
   new_e->type.lineno = lhs->type.lineno;
@@ -1296,8 +1298,8 @@ exp_binop (int code, etree_type *lhs, etree_type *rhs)
 etree_type *
 exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
 {
-  etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->trinary));
-
+  etree_type *new_e = (etree_type *) stat_alloc (MAX (sizeof (new_e->trinary),
+						      sizeof (new_e->value)));
   new_e->type.node_code = code;
   new_e->type.filename = cond->type.filename;
   new_e->type.lineno = cond->type.lineno;
@@ -1315,8 +1317,8 @@ exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
 etree_type *
 exp_unop (int code, etree_type *child)
 {
-  etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->unary));
-
+  etree_type *new_e = (etree_type *) stat_alloc (MAX (sizeof (new_e->unary),
+						      sizeof (new_e->value)));
   new_e->unary.type.node_code = code;
   new_e->unary.type.filename = child->type.filename;
   new_e->unary.type.lineno = child->type.lineno;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]