]> Zhao Yanbai Git Server - minix.git/commitdiff
magic pass: disable extra isArrayAsStructTy check 29/3229/2
authorDavid van Moolenbroek <david@minix3.org>
Wed, 11 Nov 2015 04:40:52 +0000 (05:40 +0100)
committerLionel Sambuc <lionel.sambuc@gmail.com>
Wed, 13 Jan 2016 19:32:29 +0000 (20:32 +0100)
The check caused the pass to crash on the new MIB service.

Change-Id: Iad475d4e7368d17ebf6fee32f280b00bd874b780

minix/llvm/passes/magic/support/TypeUtil.cpp

index bab861ca6f88d47019d1681991091f0a6fe9c076..a963c8c11d51af7bb1352540abe282acdfbb56f1 100644 (file)
@@ -148,7 +148,22 @@ bool TypeUtil::isArrayAsStructTy(TYPECONST Type *type) {
    if(!type->isStructTy()) {
        return false;
    }
-   return type->getNumContainedTypes() == 1 || type->getContainedType(0) == type->getContainedType(1);
+   if (type->getNumContainedTypes() == 1) {
+       return true;
+   }
+   /*
+    * This check is no longer used, because it may wrongly fail in the case of
+    * an array of instances of a structure that contains a union that is
+    * initialized in different ways for array element 0 and 1.  What we really
+    * need is a check to see whether the elements are *compatible*, but we do
+    * not appear to have the means to do that here.  We warn if the check fails
+    * so as to make sure that its removal is not the source of new problems.
+    */
+   if (type->getContainedType(0) != type->getContainedType(1)) {
+       TypeUtilLog("strict isArrayAsStructTy test failed");
+       //return false;
+   }
+   return true;
 }
 
 unsigned TypeUtil::getHash(TYPECONST Type* type) {