[binutils-gdb] ubsan: nios2: left shift cannot be represented in type 'int'

Alan Modra amodra@sourceware.org
Mon Dec 16 07:11:00 GMT 2019


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

commit 8a92faab92e359a860da6c69741acd1fac24dad6
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Dec 16 09:58:52 2019 +1030

    ubsan: nios2: left shift cannot be represented in type 'int'
    
    	* nios2-dis.c (nios2_print_insn_arg): Avoid signed overflow

Diff:
---
 opcodes/ChangeLog   | 4 ++++
 opcodes/nios2-dis.c | 4 ++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 1e13b1f..113fd09 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,9 @@
 2019-12-16  Alan Modra  <amodra@gmail.com>
 
+	* nios2-dis.c (nios2_print_insn_arg): Avoid signed overflow
+
+2019-12-16  Alan Modra  <amodra@gmail.com>
+
 	* xstormy16-ibld.c: Regenerate.
 
 2019-12-16  Alan Modra  <amodra@gmail.com>
diff --git a/opcodes/nios2-dis.c b/opcodes/nios2-dis.c
index 731860c..d548adc 100644
--- a/opcodes/nios2-dis.c
+++ b/opcodes/nios2-dis.c
@@ -858,7 +858,7 @@ nios2_print_insn_arg (const char *argptr,
 		if (i & (1 << 10))
 		  reglist |= (1 << 28);
 		if (i & (1 << 11))
-		  reglist |= (1 << 31);
+		  reglist |= (1u << 31);
 	      }
 	    else
 	      reglist = i << 2;
@@ -887,7 +887,7 @@ nios2_print_insn_arg (const char *argptr,
 	for (k = (dir == 1 ? 0 : 31);
 	     (dir == 1 && k < 32) || (dir == -1 && k >= 0);
 	     k += dir)
-	  if (reglist & (1 << k))
+	  if (reglist & (1u << k))
 	    {
 	      if (t)
 		(*info->fprintf_func) (info->stream, ",");



More information about the Binutils-cvs mailing list