Approved by Duncan:

$ svn merge -c 113107 https://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk
--- Merging r113107 into '.':
U    gcc/llvm-convert.cpp
$ svn merge -c 113070 https://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk
--- Merging r113070 into '.':
U    libada/Makefile.in

 r113070 | baldrick | 2010-09-04 17:05:31 +0200 (Sat, 04 Sep 2010) | 2 lines

 Temporary workaround for PR8051, which breaks the Ada front-end build.


 r113107 | baldrick | 2010-09-05 15:25:32 +0200 (Sun, 05 Sep 2010) | 11 lines

 Commit 106612 (stuart) broke the Ada front-end build.  The
 problem is that the Ada f-e likes to mark fields as bitfields
 whether they are really bitfields or not.  In Ada a bitfield
 can be of any type (including struct and array types), while
 commit 106612 only works properly for bitfields of scalar type.
 When building the Ada f-e, the only non-scalar bitfields are
 actually bogus bitfields - i.e. those that don't need to be
 handled as bitfields at all.  Thus the build can be fixed
 by using the isBitfield predicate which only returns true for
 non-bogus bitfields.

llvm-svn: 113112
diff --git a/llvm-gcc-4.2/gcc/llvm-convert.cpp b/llvm-gcc-4.2/gcc/llvm-convert.cpp
index 3b1cd31..42490f6 100644
--- a/llvm-gcc-4.2/gcc/llvm-convert.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-convert.cpp
@@ -8480,7 +8480,7 @@
     // Zero-sized bitfields upset the type converter.  If it's not a
     // bit-field, or it is a bit-field but it has a non-zero precision
     // type, go ahead and convert it.
-    if (!DECL_BIT_FIELD_TYPE(Field) || TYPE_PRECISION(TREE_TYPE(Field)))
+    if (!isBitfield(Field) || TYPE_PRECISION(TREE_TYPE(Field)))
       Val = Convert(FieldValue);        // Decode the field's value.
 
     if (DECL_SIZE(Field)) {
diff --git a/llvm-gcc-4.2/libada/Makefile.in b/llvm-gcc-4.2/libada/Makefile.in
index 07407a4..a4e8f9a 100644
--- a/llvm-gcc-4.2/libada/Makefile.in
+++ b/llvm-gcc-4.2/libada/Makefile.in
@@ -55,7 +55,8 @@
 include $(GCC_DIR)/libada-mk
 
 TARGET_LIBGCC2_CFLAGS=
-GNATLIBCFLAGS= -g -O2
+# LLVM LOCAL pass -disable-physical-join as a temporary workaround for PR8051
+GNATLIBCFLAGS= -g -O2 -mllvm -disable-physical-join
 # Get target-specific overrides for TARGET_LIBGCC2_CFLAGS
 # and possibly GNATLIBCFLAGS.  Currently this uses files
 # in gcc/config.  The 'subst' call is used to rerelativize them