shithub: scc

Download patch

ref: 53727b8e75d92fb88ac9916608e581e181d832c6
parent: 2883d0179563960dacbe4c97ec78f3822aca7c29
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Wed Oct 7 09:57:34 EDT 2015

Fix cast between integer constants

--- a/cc1/fold.c
+++ b/cc1/fold.c
@@ -226,7 +226,7 @@
 	default:    return 0;
 	}
 
-	res->u.u = u;
+	res->u.u = u & ones(res->type->size);
 	return 1;
 
 sign:
@@ -521,6 +521,7 @@
 			u = (oldtp->sign) ? osym->u.i : osym->u.u;
 			break;
 		case FLOAT:
+			oldtp = newtp;
 			u = osym->u.f;
 			break;
 		default:
@@ -529,7 +530,6 @@
 		mask = ones(newtp->size);
 		if (newtp->sign) {
 			negmask = ~mask;
-			u &= mask;
 			if (u & (negmask >> 1) & mask)
 				u |= negmask;
 			aux.u.i = u;
--- a/cc1/tests/test023.c
+++ b/cc1/tests/test023.c
@@ -13,8 +13,8 @@
 	A3	#W1	:W
 	A3	#WFFFFFFFF	:W
 	A3	#WFFFFFFFF	:W
+	A3	#WFFFF	:W
 	A3	#WFFFFFFFF	:W
-	A3	#WFFFFFFFF	:W
 	A3	#W3	:W
 	A3	#W1	:W
 	A3	#W0	:W
@@ -21,7 +21,7 @@
 	A4	#Z1	:Z
 	A4	#ZFFFFFFFF	:Z
 	A4	#ZFFFFFFFF	:Z
-	A4	#ZFFFFFFFF	:Z
+	A4	#ZFFFF	:Z
 	A4	#ZFFFFFFFF	:Z
 	A4	#Z3	:Z
 	A4	#Z1	:Z
--- a/cc1/tests/test024.c
+++ b/cc1/tests/test024.c
@@ -13,14 +13,14 @@
 	A3	#Q1	:Q
 	A3	#QFFFFFFFF	:Q
 	A3	#QFFFFFFFF	:Q
+	A3	#QFFFF	:Q
 	A3	#QFFFFFFFF	:Q
-	A3	#QFFFFFFFF	:Q
 	A3	#Q3	:Q
 	A3	#Q1	:Q
 	A4	#O1	:O
 	A4	#OFFFFFFFF	:O
 	A4	#OFFFFFFFF	:O
-	A4	#OFFFFFFFF	:O
+	A4	#OFFFF	:O
 	A4	#OFFFFFFFF	:O
 	A4	#O3	:O
 	A4	#O0	:O
--