Переглянути джерело

Patched overlapping temporary variables

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8037 8c9fc860-2736-0410-a75d-ab315db34111
felixf 7 роки тому
батько
коміт
de8d09fec7
2 змінених файлів з 3 додано та 2 видалено
  1. 2 1
      source/FoxGlobal.Mod
  2. 1 1
      source/FoxIntermediateBackend.Mod

+ 2 - 1
source/FoxGlobal.Mod

@@ -580,7 +580,8 @@ TYPE
 				IF ~(SyntaxTree.Resolved IN type.state) THEN
 					size := -1
 				ELSIF type(SyntaxTree.MathArrayType).form = SyntaxTree.Static THEN
-					size := SizeOf(type(SyntaxTree.MathArrayType).arrayBase.resolved)*type(SyntaxTree.MathArrayType).staticLength
+					size := SizeOf(type(SyntaxTree.MathArrayType).arrayBase.resolved)*type(SyntaxTree.MathArrayType).staticLength;
+					type.SetSize(size);
 				ELSIF type(SyntaxTree.MathArrayType).form = SyntaxTree.Tensor THEN
 					size := addressSize (* pointer to geometry descriptor *)
 				ELSE

+ 1 - 1
source/FoxIntermediateBackend.Mod

@@ -1271,7 +1271,7 @@ TYPE
 				OR
 				SemanticChecker.IsPointerType(t1) & SemanticChecker.IsPointerType(t2)
 				OR
-				~t1.NeedsTrace() & ~t2.NeedsTrace() & (t1.sizeInBits = t2.sizeInBits)
+				~t1.NeedsTrace() & ~t2.NeedsTrace() & (t1.sizeInBits > 0) & (t1.sizeInBits = t2.sizeInBits) 
 				OR
 				(t1 IS SyntaxTree.MathArrayType) & (t2 IS SyntaxTree.MathArrayType) & 
 				(t1(SyntaxTree.MathArrayType).form = t2(SyntaxTree.MathArrayType).form) &