mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-25 08:25:38 +08:00
instantiate1.C: Use scan-assembler, not link errors.
* g++.dg/ext/instantiate1.C: Use scan-assembler, not link errors. * g++.dg/ext/instantiate2.C, g++.dg/ext/instantiate3.C: Likewise; move from g++.old-deja/g++.ext/. From-SVN: r51491
This commit is contained in:
parent
55a2ea2a34
commit
1b58660a9d
@ -1,3 +1,9 @@
|
||||
2002-03-27 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* g++.dg/ext/instantiate1.C: Use scan-assembler, not link errors.
|
||||
* g++.dg/ext/instantiate2.C, g++.dg/ext/instantiate3.C: Likewise;
|
||||
move from g++.old-deja/g++.ext/.
|
||||
|
||||
2002-03-27 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* g++.dg/init/new2.C: New test.
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Test that 'extern template' suppresses instantiations.
|
||||
// { dg-do link }
|
||||
// { dg-do compile }
|
||||
// { dg-options "" }
|
||||
|
||||
template <class T> void f (T) { }
|
||||
@ -11,22 +11,14 @@ template <class T> struct A {
|
||||
template <class T> void A<T>::f () { }
|
||||
extern template struct A<int>;
|
||||
|
||||
// { dg-error "void f<int>\\(int\\)" "suppressing f<int>" { target *-*-* } "0" }
|
||||
// { dg-final { scan-assembler-not "\n_?_Z1fIiEvT_(:|\n)" } }
|
||||
void test_f_int () { f(42); }
|
||||
|
||||
// { dg-error "A<int>::f\\(\\)" "suppressing A<int>" { target *-*-* } "0" }
|
||||
// { dg-final { scan-assembler-not "\n_?_ZN1AIiE1fEv(:|\n)" } }
|
||||
void test_A_int_f () { A<int> a; a.f (); }
|
||||
|
||||
// { dg-bogus "void f<double>\\(double\\)" "f<double>" { target *-*-* } "0" }
|
||||
// { dg-final { scan-assembler "\n_?_Z1fIdEvT_(:|\n)" } }
|
||||
void test_f_double () { f (2.0); }
|
||||
|
||||
// { dg-bogus "A<double>::f\\(\\)" "A<double>" { target *-*-* } "0" }
|
||||
// { dg-final { scan-assembler "\n_?_ZN1AIdE1fEv(:|\n)" } }
|
||||
void test_A_double_f () { A<double> b; b.f (); }
|
||||
|
||||
int main ()
|
||||
{
|
||||
test_f_int ();
|
||||
test_A_int_f ();
|
||||
test_f_double ();
|
||||
test_A_double_f ();
|
||||
}
|
||||
|
15
gcc/testsuite/g++.dg/ext/instantiate2.C
Normal file
15
gcc/testsuite/g++.dg/ext/instantiate2.C
Normal file
@ -0,0 +1,15 @@
|
||||
// Test that 'static template' instantiates statics.
|
||||
// { dg-do compile }
|
||||
// { dg-options "-fno-implicit-templates" }
|
||||
|
||||
template <class T> struct A {
|
||||
static T t;
|
||||
};
|
||||
template <class T> T A<T>::t = 0;
|
||||
static template struct A<int>;
|
||||
|
||||
// { dg-final { scan-assembler "\n_?_ZN1AIiE1tE(:|\n)" } }
|
||||
void test_int() { A<int>::t = 42; }
|
||||
|
||||
// { dg-final { scan-assembler-not "\n_?_ZN1AIcE1tE(:|\n)" } }
|
||||
void test_char() { A<char>::t = 42; }
|
14
gcc/testsuite/g++.dg/ext/instantiate3.C
Normal file
14
gcc/testsuite/g++.dg/ext/instantiate3.C
Normal file
@ -0,0 +1,14 @@
|
||||
// Test that 'inline template' instantiates the vtable.
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O -fno-implicit-templates" }
|
||||
|
||||
template <class T> struct A {
|
||||
virtual void f () { }
|
||||
};
|
||||
inline template struct A<int>;
|
||||
|
||||
// { dg-final { scan-assembler "\n_?_ZTV1AIiE(:|\n)" } }
|
||||
A<int> a;
|
||||
|
||||
// { dg-final { scan-assembler-not "\n_?_ZTV1AIcE(:|\n)" } }
|
||||
A<char> b;
|
@ -1,27 +0,0 @@
|
||||
// Test that 'static template' instantiates statics.
|
||||
// Special g++ Options: -g -fno-implicit-templates
|
||||
|
||||
// Ignore the 'ld returned 1' message from collect2.
|
||||
// excess errors test - XFAIL *-*-*
|
||||
|
||||
template <class T> struct A {
|
||||
static T t;
|
||||
};
|
||||
template <class T> T A<T>::t = 0;
|
||||
static template struct A<int>;
|
||||
|
||||
// These functions must be defined in a single line, so that, even if
|
||||
// constants or pointers are placed in the code section (for example,
|
||||
// on the SH), we still get the same line numbers.
|
||||
|
||||
void test_int() { A<int>::t = 42; } // gets bogus error
|
||||
|
||||
void test_char() { A<char>::t = 42; } // ERROR - not instantiated XFAIL *-*-irix* *-*-hpux*
|
||||
// Irix's default linker does not produce line numbers so XFAIL it.
|
||||
// Similarly for HP's linker
|
||||
|
||||
int main ()
|
||||
{
|
||||
test_int ();
|
||||
test_char ();
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
// Test that 'inline template' instantiates the vtable.
|
||||
// Special g++ Options: -g -O -fno-implicit-templates
|
||||
|
||||
// Ignore the 'ld returned 1' message from collect2.
|
||||
// excess errors test - XFAIL *-*-*
|
||||
|
||||
template <class T> struct A {
|
||||
virtual void f () { }
|
||||
};
|
||||
inline template struct A<int>;
|
||||
|
||||
A<int> a; // gets bogus error
|
||||
A<char> b; // ERROR - not instantiated XFAIL mips*-*-* *-*-hpux* i?86-pc-cygwin
|
||||
// Irix's default linker does not
|
||||
// produce line numbers so XFAIL it.
|
||||
// Similarly for HPUX.
|
||||
|
||||
int main ()
|
||||
{
|
||||
}
|
Loading…
Reference in New Issue
Block a user