* ld-selective/5.cc: New test.

* ld-selective/selective.exp: Run it as xfailed.

	* ld-selective/4.cc: Correct spelling of "lose".
This commit is contained in:
Hans-Peter Nilsson 2000-09-28 22:57:26 +00:00
parent b16885a132
commit bd0110a3cb
4 changed files with 90 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2000-09-29 Hans-Peter Nilsson <hp@bitrange.com>
* ld-selective/5.cc: New test.
* ld-selective/selective.exp: Run it as xfailed.
* ld-selective/4.cc: Correct spelling of "lose".
2000-09-05 Alan Modra <alan@linuxcare.com.au>
* ld-selective/selective.exp: Remove the xfails for hppa.

View File

@ -4,7 +4,7 @@ struct A
virtual void bar();
};
void A::foo() { } // loose
void A::foo() { } // lose
void A::bar() { } // keep
struct B : public A
@ -12,7 +12,7 @@ struct B : public A
virtual void foo();
};
void B::foo() { } // loose
void B::foo() { } // lose
void _start() __asm__("_start"); // keep

View File

@ -0,0 +1,32 @@
struct A
{
virtual void foo();
virtual void bar();
};
void A::foo() { } // lose
void A::bar() { } // keep
struct B : public A
{
virtual void foo();
};
void B::foo() { } // lose
void _start() __asm__("_start"); // keep
A a; // keep
B b;
A *getme() { return &a; } // keep
extern B* dropme2();
void dropme1() { dropme2()->foo(); } // lose
B *dropme2() { return &b; } // lose
void _start()
{
getme()->bar();
}
extern "C" void __main() { }

View File

@ -32,6 +32,7 @@ set test2 "selective2"
set test3 "selective3"
set test4 "selective4"
set test5 "selective5"
set test6 "selective6"
set cflags "-w -O2 -ffunction-sections -fdata-sections"
set cxxflags "-fvtable-gc -fno-exceptions -fno-rtti"
@ -43,6 +44,7 @@ if { [which $CXX] == 0 } {
untested $test3
untested $test4
untested $test5
untested $test6
return
}
@ -191,3 +193,50 @@ if ![ld_simple_link $ld tmpdir/4.x "$ldflags tmpdir/4.o"] {
}
}
}
if { ![ld_compile "$CC $cflags $cxxflags" $srcdir/$subdir/5.cc tmpdir/5.o]} {
unresolved $test6
return
}
# Exposes a bug, currently. FIXME: Fix it.
# FIXME: Break out the nesting to a function that takes two lists, one
# with expected present symbols, one with expected absent symbols, and
# iterates over nm output. Use that function in all tests here.
setup_xfail "*-*-*"
if ![ld_simple_link $ld tmpdir/5.x "$ldflags tmpdir/5.o"] {
fail $test6
} else {
if ![ld_nm $nm tmpdir/5.x] {
unresolved $test6
} else {
if {[info exists nm_output(foo__1B)]} {
send_log "foo__1B == $nm_output(foo__1B)\n"
verbose "foo__1B == $nm_output(foo__1B)"
fail $test6
} else {
if {[info exists nm_output(foo__1A)]} {
send_log "foo__1A == $nm_output(foo__1A)\n"
verbose "foo__1A == $nm_output(foo__1A)"
fail $test6
} else {
if {[info exists nm_output(dropme1__Fv)]} {
send_log "dropme1__Fv == $nm_output(dropme1__Fv)\n"
verbose "dropme1__Fv == $nm_output(dropme1__Fv)"
fail $test6
} else {
if {[info exists nm_output(dropme2__Fv)]} {
send_log "dropme2__Fv == $nm_output(dropme2__Fv)\n"
verbose "dropme2__Fv == $nm_output(dropme2__Fv)"
fail $test6
} else {
pass $test6
}
}
}
}
}
}