[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