compiler/libec: Added missing null pointer check processing extensionCompoundExp...
authorJerome St-Louis <jerome@ecere.com>
Tue, 2 Jul 2013 20:54:45 +0000 (16:54 -0400)
committerJerome St-Louis <jerome@ecere.com>
Tue, 2 Jul 2013 20:54:45 +0000 (16:54 -0400)
- Fixed crash on compiling Destroy{0}

compiler/bootstrap/libec/bootstrap/pass2.c
compiler/libec/src/pass2.ec

index c73104d..5d1e12b 100644 (file)
@@ -3446,7 +3446,10 @@ break;
 }
 case 25:
 {
-((struct Expression *)(*((struct Statement *)(*exp->compound->compound.statements).last)->expressions).last)->usage |= exp->usage & (((unsigned int)(0x1)) | (((unsigned int)(0x1)) << 2) | (((unsigned int)(0x1)) << 4));
+struct Expression * e = (*((struct Statement *)(*exp->compound->compound.statements).last)->expressions).last;
+
+if(e)
+e->usage |= exp->usage & (((unsigned int)(0x1)) | (((unsigned int)(0x1)) << 2) | (((unsigned int)(0x1)) << 4));
 ProcessStatement(exp->compound);
 break;
 }
index d5aa81e..971f533 100644 (file)
@@ -2736,8 +2736,9 @@ static void ProcessExpression(Expression exp)
       }
       case extensionCompoundExp:
       {
-         ((Expression)((Statement)exp.compound.compound.statements->last).expressions->last).usage |= exp.usage & 
-            ExpUsage { usageGet = true, usageArg = true, usageMember = true };
+         Expression e = ((Statement)exp.compound.compound.statements->last).expressions->last;
+         if(e)
+            e.usage |= exp.usage & ExpUsage { usageGet = true, usageArg = true, usageMember = true };
 
          ProcessStatement(exp.compound);