patches/gcc/3.2.3/170-gcc-3.3-libstdc++-v3-dg.exp.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:08:06 2008 +0000 (2008-02-17)
changeset 431 8bde4c6ea47a
permissions -rw-r--r--
Robert P. J. DAY says:

apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3. so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories. seems like a
cheap way to add a couple new versions.
yann@402
     1
Without this patch, the command
yann@402
     2
yann@402
     3
RUNTESTFLAGS=--target=powerpc-750-linux-gnu -v -v -v -v make check-target-libstdc++-v3
yann@402
     4
yann@402
     5
fails in two ways:
yann@402
     6
1. the -L option meant to locate the testsuite directory is incorrect, and
yann@402
     7
2. the wrong compiler is invoked, causing all sorts of havoc, not least of which
yann@402
     8
is the native compiler is invoked when we really wanted to invoke the cross-compiler
yann@402
     9
we just built.
yann@402
    10
yann@402
    11
Here's an example log of the problem in action.  Every testcase fails, this shows just one:
yann@402
    12
-------------
yann@402
    13
Invoking the compiler as g++ -ggdb3 -DDEBUG_ASSERT -I/home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.12/build/powerpc-750-linux-gnu/gcc-3.3-glibc-2.2.5/gcc-3.3/libstdc++-v3/testsuite /home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.12/build/powerpc-750-linux-gnu/gcc-3.3-glibc-2.2.5/gcc-3.3/libstdc++-v3/testsuite/20_util/binders.cc   -g -O2 -DDEBUG_ASSERT  -L/testsuite -lv3test -lm  -o ./binders.exe
yann@402
    14
compiler exited with status 1
yann@402
    15
output is:
yann@402
    16
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_function.h: In method `void binder2nd<mem_fun1_ref_t<void,Elem,int> >::operator ()(const Elem &) const':^M
yann@402
    17
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_algo.h:83:   instantiated from `for_each<Elem *, binder2nd<mem_fun1_ref_t<void,Elem,int> > >(Elem *, Elem *, binder2nd<mem_fun1_ref_t<void,Elem,int> >)'^M
yann@402
    18
/home3/dank/wk/ixos/dap_interim/linux/3rdParty/crosstool/crosstool-0.12/build/powerpc-750-linux-gnu/gcc-3.3-glibc-2.2.5/gcc-3.3/libstdc++-v3/testsuite/20_util/binders.cc:43:   instantiated from here^M
yann@402
    19
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_function.h:224: conversion from `const Elem' to `Elem &' discards qualifiers^M
yann@402
    20
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_function.h:622: in passing argument 1 of `mem_fun1_ref_t<void,Elem,int>::operator ()(Elem &, int) const'^M
yann@402
    21
...
yann@402
    22
FAIL: 20_util/binders.cc (test for excess errors)
yann@402
    23
WARNING: 20_util/binders.cc compilation failed to produce executable
yann@402
    24
-------------
yann@402
    25
yann@402
    26
And here's the patch.  I'm not happy with it, and it probably gets some cases wrong,
yann@402
    27
but it seems to work for the common native case and for my cross-compiler case.
yann@402
    28
yann@402
    29
--- gcc-3.3/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp.old	Sun Jul 13 10:42:01 2003
yann@402
    30
+++ gcc-3.3/libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp	Sun Jul 13 11:39:54 2003
yann@402
    31
@@ -46,8 +46,23 @@
yann@402
    32
     global gluefile wrap_flags
yann@402
    33
     global ld_library_path
yann@402
    34
     global tool_root_dir
yann@402
    35
+    global target_triplet
yann@402
    36
 
yann@402
    37
     set blddir [lookfor_file [get_multilibs] libstdc++-v3]
yann@402
    38
+    if { $blddir == "" } {
yann@402
    39
+        set multilibs [get_multilibs]
yann@402
    40
+        # FIXME: assume multilib only one level deep
yann@402
    41
+        set multisub [file tail $multilibs]
yann@402
    42
+        verbose "libstdc++-v3-init: couldn't find libstdc++-v3 in $multilibs, trying $objdir"
yann@402
    43
+        set blddir [lookfor_file ${objdir} "$target_triplet/$multisub/libstdc++-v3"]
yann@402
    44
+    }
yann@402
    45
+    if { $blddir == "" } {
yann@402
    46
+        verbose "libstdc++-v3-init: couldn't find libstdc++-v3, trying $objdir without multilibs"
yann@402
    47
+        set blddir [lookfor_file ${objdir} "$target_triplet/libstdc++-v3"]
yann@402
    48
+    }
yann@402
    49
+    if { $blddir == "" } {
yann@402
    50
+         error "Can't find libstdc++-v3"
yann@402
    51
+    }
yann@402
    52
 
yann@402
    53
     # By default, we assume we want to run program images.
yann@402
    54
     global dg-do-what-default