--- gcc/testsuite/c-c++-common/Wconversion-real.c.orig
+++ gcc/testsuite/c-c++-common/Wconversion-real.c
@@ -5,6 +5,12 @@
 /* { dg-options "-std=c99 -Wconversion" { target c } } */
 /* { dg-options "-Wconversion" { target c++ } } */
 /* { dg-require-effective-target large_double } */
+/* Due to i386 rounding of long doubles on FreeBSD and DragonFly, the tests
+   should be set to "xfail" for those platforms, but it's not possible to
+   set both "target" and "xfail" together.  An attempt to mark it
+   UNSUPPORTED for large_long_double and not (i386 FreeBSD i386 DragonFly)
+   failed.  All the supported platforms of gcc-aux have large long double
+   so we'll just assume it for these two tests and use xfail instead. */
 
 float  vfloat;
 double vdouble;
@@ -24,8 +30,8 @@
   vfloat = 3.1; /* { dg-warning "conversion" } */
   ffloat (3.1L); /* { dg-warning "conversion" } */
   vfloat = 3.1L;  /* { dg-warning "conversion" } */
-  fdouble (3.1L); /* { dg-warning "conversion" "" { target large_long_double } } */
-  vdouble = 3.1L; /* { dg-warning "conversion" "" { target large_long_double } } */
+  fdouble (3.1L); /* { dg-warning "conversion" "" { xfail { i?86-*-freebsd* i?86-*-dragonfly* } } } */
+  vdouble = 3.1L; /* { dg-warning "conversion" "" { xfail { i?86-*-freebsd* i?86-*-dragonfly* } } } */
   ffloat (vdouble); /* { dg-warning "conversion" } */
   vfloat = vdouble; /* { dg-warning "conversion" } */
   ffloat (vlongdouble); /* { dg-warning "conversion" } */
--- libstdc++-v3/testsuite/lib/libstdc++.exp.orig
+++ libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -877,17 +877,18 @@
       set f [open $src "w"]
       puts $f "#include <locale>"
       puts $f "#include <cstdio>"
-      puts $f "using namespace std;"	
+      puts $f "using namespace std;"
       puts $f "int main (int argc, char** argv)"
       puts $f "{"
+      puts $f "  const char* mlx = *(argv + 1);"
       puts $f "  try"	
       puts $f "  {"
-      puts $f "    locale(*(argv + 1));"
+      puts $f "    locale((char*)(mlx));"
       puts $f "    return 0;"
       puts $f "  }"
       puts $f "  catch(...)"
       puts $f "  {"
-      puts $f "    printf(\"locale '%s' not supported\\n\", *(argv + 1));"
+      puts $f "    printf(\"locale '%s' not supported\\n\", mlx);"
       puts $f "    return 1;"
       puts $f "  }"	
       puts $f "}"
