changeset 397:1236f720862e

Fix from Daniel Glockner: save_reg tried to save a floating point value from the value stack because its r2 contained 0 (== TREG_EAX), but r2 is valid only for VT_LLONG.
author landley@driftwood
date Sat, 07 Oct 2006 23:41:55 -0400
parents 928147ea8ab6
children 5ca71a951aa0
files tcc.c
diffstat 1 files changed, 2 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/tcc.c	Sat Oct 07 23:00:13 2006 -0400
+++ b/tcc.c	Sat Oct 07 23:41:55 2006 -0400
@@ -4585,7 +4585,8 @@
     l = 0;
     for(p=vstack;p<=vtop;p++) {
         if ((p->r & VT_VALMASK) == r ||
-            (p->r2 & VT_VALMASK) == r) {
+            ((p->type.t & VT_BTYPE) == VT_LLONG && (p->r2 & VT_VALMASK) == r)
+        {
             /* must save value on stack if not already done */
             if (!saved) {
                 /* NOTE: must reload 'r' because r might be equal to r2 */