From: dgregor Date: Thu, 21 Jul 2005 03:56:46 +0000 (+0000) Subject: 2005-07-20 Douglas Gregor X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=94df32819e4ac3297be9b0cb8cdb2d65da8323df;p=pf3gnuchains%2Fgcc-fork.git 2005-07-20 Douglas Gregor PR c++/2922 * g++.dg/lookup/two-stage2.C: New. * g++.dg/lookup/two-stage3.C: New. * g++.dg/lookup/two-stage4.C: New. Illustrates how we have not yet fixed two-stage name lookup for operators. * g++.dg/template/call3.C: Compiler now produces an appropriate error message. * g++.dg/template/crash37.C: Compiler now describes bla() on line 14 as a candidate. * g++.dg/template/ptrmem4.C: Compiler produces different error message. * g++.old-deja/g++.other/pmf3.C: Compiler now describes connect_to_method as a candidate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102217 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index acbc2d6bc0a..f701137d2fd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2005-07-20 Douglas Gregor + + PR c++/2922 + * g++.dg/lookup/two-stage2.C: New. + * g++.dg/lookup/two-stage3.C: New. + * g++.dg/lookup/two-stage4.C: New. Illustrates how we have not yet + fixed two-stage name lookup for operators. + * g++.dg/template/call3.C: Compiler now produces an appropriate + error message. + * g++.dg/template/crash37.C: Compiler now describes bla() on line + 14 as a candidate. + * g++.dg/template/ptrmem4.C: Compiler produces different error + message. + * g++.old-deja/g++.other/pmf3.C: Compiler now describes + connect_to_method as a candidate. + 2005-07-20 James A. Morrison * gcc.dg/fold-alloc-1.c: New test. diff --git a/gcc/testsuite/g++.dg/lookup/two-stage2.C b/gcc/testsuite/g++.dg/lookup/two-stage2.C new file mode 100644 index 00000000000..e758fc8f889 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/two-stage2.C @@ -0,0 +1,19 @@ +// { dg-do compile } +// PR c++/2922 + +char& f(char); + +template +void g(T t) +{ + char& c1 = f(1); // not dependent + char& c2 = f(t); // dependent +} + +int&f (int); + +int main() +{ + g(2); // f(char) followed by f(int) + g('a'); // two f(char) +} diff --git a/gcc/testsuite/g++.dg/lookup/two-stage3.C b/gcc/testsuite/g++.dg/lookup/two-stage3.C new file mode 100644 index 00000000000..fff853c1ba0 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/two-stage3.C @@ -0,0 +1,22 @@ +// { dg-do compile } +// PR c++/2922 + +namespace tpl_ { + +template +char test(T); + +template +struct check +{ + static T const t; + enum { value = 1 == sizeof(test(t)) }; +}; + +double test(int); + +} + +bool const two_phase_lookup_supported = tpl_::check::value; + +int compile_time_assert[two_phase_lookup_supported ? 1 : -1]; diff --git a/gcc/testsuite/g++.dg/lookup/two-stage4.C b/gcc/testsuite/g++.dg/lookup/two-stage4.C new file mode 100644 index 00000000000..bbb44afa0d0 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/two-stage4.C @@ -0,0 +1,20 @@ + +// Contributed by Douglas Gregor + +template struct wrap {}; + +template bool& operator==(wrap, wrap); + +template +void g(T, wrap > x) +{ + bool& b = x == x; // { dg-bogus "invalid initialization of reference" "" { xfail *-*-*} } +} + +template int& operator==(wrap >, wrap >); + +void h() +{ + wrap > x; + g(17, x); +} diff --git a/gcc/testsuite/g++.dg/template/call3.C b/gcc/testsuite/g++.dg/template/call3.C index 1dd2b51b3eb..bbb6c7b3a2b 100644 --- a/gcc/testsuite/g++.dg/template/call3.C +++ b/gcc/testsuite/g++.dg/template/call3.C @@ -9,7 +9,7 @@ struct A template struct B : T { - B() { foo(T()); } + B() { foo(T()); } // { dg-error "cannot convert" } }; B b; diff --git a/gcc/testsuite/g++.dg/template/crash37.C b/gcc/testsuite/g++.dg/template/crash37.C index b2f0cdb7b66..0d837bd132d 100644 --- a/gcc/testsuite/g++.dg/template/crash37.C +++ b/gcc/testsuite/g++.dg/template/crash37.C @@ -11,7 +11,7 @@ struct coperator_stack struct helper {}; template -void bla(F f) +void bla(F f) // { dg-error "candidates" } { } @@ -20,7 +20,7 @@ struct definition { definition() { - bla(coperator_stack::push3); // { dg-error "" } + bla(coperator_stack::push3); // { dg-error "" } } }; diff --git a/gcc/testsuite/g++.dg/template/ptrmem4.C b/gcc/testsuite/g++.dg/template/ptrmem4.C index 5cfd8c7c8d6..db80eecf830 100644 --- a/gcc/testsuite/g++.dg/template/ptrmem4.C +++ b/gcc/testsuite/g++.dg/template/ptrmem4.C @@ -6,7 +6,7 @@ // Pointer to member function template argument deduction ICE. -template void queryAliases(CONT& fill_me); // { dg-error "argument" } +template void queryAliases(CONT& fill_me); // { dg-error "candidates" } struct SpyExample { @@ -16,5 +16,5 @@ struct SpyExample void SpyExample::ready() { - queryAliases(inputs); // { dg-error "" } + queryAliases(inputs); // { dg-error "" } } diff --git a/gcc/testsuite/g++.old-deja/g++.other/pmf3.C b/gcc/testsuite/g++.old-deja/g++.other/pmf3.C index 695a1c584ab..e5f757d07af 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/pmf3.C +++ b/gcc/testsuite/g++.old-deja/g++.other/pmf3.C @@ -5,11 +5,11 @@ template void connect_to_method( T *receiver, - void (T::*method)()) + void (T::*method)()) // { dg-error "candidates are" } {} class Gtk_Base -{ +{ public: void expose(); void show();