diff options
author | Jason Merrill <jason@redhat.com> | 2009-11-04 17:29:35 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2009-11-04 17:29:35 -0500 |
commit | f4ecc8fd6b67ce601991e0f59a226bb5a18bed16 (patch) | |
tree | dfb6623ce109741f4ca6acf4db63280aef6ca777 /gcc | |
parent | f96b189564f36834bda68bf2a5b24bc50fbd1ea1 (diff) | |
download | gcc-f4ecc8fd6b67ce601991e0f59a226bb5a18bed16.zip gcc-f4ecc8fd6b67ce601991e0f59a226bb5a18bed16.tar.gz gcc-f4ecc8fd6b67ce601991e0f59a226bb5a18bed16.tar.bz2 |
re PR c++/39413 (static_assert and SFINAE)
PR c++/39413
* search.c (lookup_base): Don't complete_type (base).
From-SVN: r153920
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/search.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/nested3.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/overload11.C | 27 |
5 files changed, 43 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 82104d2..edf3ca8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2009-11-04 Jason Merrill <jason@redhat.com> + PR c++/39413 + * search.c (lookup_base): Don't complete_type (base). + PR c++/35067 * method.c (use_thunk): Check DECL_WEAK as well as DECL_ONE_ONLY. diff --git a/gcc/cp/search.c b/gcc/cp/search.c index d6521fb..356f3d6 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -214,9 +214,11 @@ lookup_base (tree t, tree base, base_access access, base_kind *kind_ptr) t_binfo = TYPE_BINFO (t); } - base = complete_type (TYPE_MAIN_VARIANT (base)); + base = TYPE_MAIN_VARIANT (base); - if (t_binfo) + /* If BASE is incomplete, it can't be a base of T--and instantiating it + might cause an error. */ + if (t_binfo && (COMPLETE_TYPE_P (base) || TYPE_BEING_DEFINED (base))) { struct lookup_base_data_s data; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5f63688..61f8450 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Jason Merrill <jason@redhat.com> + + PR c++/39413 + * g++.dg/template/overload11.C: New. + * g++.dg/template/nested3.C: Adjust. + 2009-11-04 Eric Botcazou <ebotcazou@adacore.com> PR ada/20548 diff --git a/gcc/testsuite/g++.dg/template/nested3.C b/gcc/testsuite/g++.dg/template/nested3.C index 1ae4bf7..5652e17 100644 --- a/gcc/testsuite/g++.dg/template/nested3.C +++ b/gcc/testsuite/g++.dg/template/nested3.C @@ -5,13 +5,13 @@ class A { int _k; }; T1 _t1; - T2 _t2; // { dg-message "instantiated" } + T2 _t2; }; template <class U> -class B { // { dg-error "declaration" } +class B { class SubB1 { - B _i; // { dg-error "incomplete type" } + B _i; }; class SubB2 { @@ -19,7 +19,6 @@ class B { // { dg-error "declaration" } }; A<U,SubB1>::SubA<SubB2> _a; // { dg-error "not a base type" "not base" } // { dg-message "note" "note" { target *-*-* } 20 } - // { dg-message "instantiated" "inst" { target *-*-* } 20 } // { dg-error "non-template" "non-template" { target *-*-* } 20 } }; diff --git a/gcc/testsuite/g++.dg/template/overload11.C b/gcc/testsuite/g++.dg/template/overload11.C new file mode 100644 index 0000000..d7b0a7c --- /dev/null +++ b/gcc/testsuite/g++.dg/template/overload11.C @@ -0,0 +1,27 @@ +// PR c++/39413 +// We don't need to instantiate Wrapper<int> to check the +// foo(const Thingy&) overload. + +template <class T> struct Incomplete; + +template <typename T> class Wrapper +{ + Incomplete<T> i; +}; + +template <typename T> struct Thingy +{ + Thingy(); + Thingy(const Wrapper<T>& v); + + template <typename X> void foo(const Thingy<X>&); + void foo(const Thingy&); +}; + +int main() +{ + Thingy<int> ap1; + Thingy<float> bp1; + + ap1.foo(bp1); +} |