[llvm-commits] [llvm-gcc-4.2] r49422 - /llvm-gcc-4.2/trunk/gcc/llvm-types.cpp

Duncan Sands baldrick at free.fr
Wed Apr 9 02:39:30 PDT 2008


Author: baldrick
Date: Wed Apr  9 04:39:29 2008
New Revision: 49422

URL: http://llvm.org/viewvc/llvm-project?rev=49422&view=rev
Log:
Hack to fix PR1971.

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-types.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-types.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-types.cpp?rev=49422&r1=49421&r2=49422&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-types.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Wed Apr  9 04:39:29 2008
@@ -1701,7 +1701,8 @@
 // node for it, but not when A is a nonvirtual base class.  So we can't
 // use that.)
 static void FixBaseClassFields(tree type) {
-  assert(TREE_CODE(type)==RECORD_TYPE);
+  if (TREE_CODE(type)!=RECORD_TYPE)
+    return;
   for (tree Field = TYPE_FIELDS(type); Field; Field = TREE_CHAIN(Field)) {
     if (TREE_CODE(Field)==FIELD_DECL && 
         !DECL_BIT_FIELD_TYPE(Field) &&
@@ -1749,7 +1750,8 @@
 // code continues to work (there are pointers stashed away in there).
 
 static void RestoreBaseClassFields(tree type) {
-  assert(TREE_CODE(type)==RECORD_TYPE);
+  if (TREE_CODE(type)!=RECORD_TYPE)
+    return;
   for (tree Field = TYPE_FIELDS(type); Field; Field = TREE_CHAIN(Field)) {
     if (TREE_CODE(Field) == FIELD_DECL && DECL_FIELD_REPLACED(Field)) {
       tree &oldTy = BaseTypesMap[TREE_TYPE(Field)];
@@ -2174,7 +2176,13 @@
   unsigned MaxSize = 0, MaxAlign = 0;
   for (tree Field = TYPE_FIELDS(type); Field; Field = TREE_CHAIN(Field)) {
     if (TREE_CODE(Field) != FIELD_DECL) continue;
-    assert(getFieldOffsetInBits(Field) == 0 && "Union with non-zero offset?");
+//    assert(getFieldOffsetInBits(Field) == 0 && "Union with non-zero offset?");
+    // Hack to get Fortran EQUIVALENCE working.
+    // TODO: Unify record and union logic and handle this optimally.
+    if (getFieldOffsetInBits(Field) != 0) {
+      ConvertingStruct = OldConvertingStruct;
+      return ConvertRECORD(type, orig_type);
+    }
 
     // Set the field idx to zero for all fields.
     SetFieldIndex(Field, 0);





More information about the llvm-commits mailing list