Fix PR c++/42260 and ensure PR c++/45383 is fixed
gcc/cp/ c++/42260 * call.c (add_builtin_candidate): At this point the resulting type of an indirection operator should be complete. gcc/testsuite/ c++/42260 c++/45383 * g++.dg/conversion/cast2.C: New test. * g++.dg/conversion/cond4/C: Likewise. Ensures we don't regress on PR c++/45383 From-SVN: r167250
This commit is contained in:
parent
9c7d5cae18
commit
c8718cb3ef
@ -1,3 +1,9 @@
|
||||
2010-11-29 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/42260
|
||||
* call.c (add_builtin_candidate): At this point the resulting type
|
||||
of an indirection operator should be complete.
|
||||
|
||||
2010-11-29 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/45383
|
||||
|
@ -2022,6 +2022,7 @@ add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
|
||||
|
||||
case INDIRECT_REF:
|
||||
if (TREE_CODE (type1) == POINTER_TYPE
|
||||
&& is_complete (TREE_TYPE (type1))
|
||||
&& (TYPE_PTROB_P (type1)
|
||||
|| TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
|
||||
break;
|
||||
|
@ -1,3 +1,10 @@
|
||||
2010-11-29 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/42260
|
||||
* g++.dg/conversion/cast2.C: New test.
|
||||
* g++.dg/conversion/cond4/C: Likewise. This ensures we don't regress on
|
||||
PR c++/45383
|
||||
|
||||
2010-11-29 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/45383
|
||||
|
9
gcc/testsuite/g++.dg/conversion/cast2.C
Normal file
9
gcc/testsuite/g++.dg/conversion/cast2.C
Normal file
@ -0,0 +1,9 @@
|
||||
// Origin: PR c++/42260
|
||||
// { dg-do compile }
|
||||
|
||||
struct A
|
||||
{
|
||||
template<typename T> operator T*();
|
||||
};
|
||||
|
||||
int i = *A();// { dg-error "no match" }
|
31
gcc/testsuite/g++.dg/conversion/cond4.C
Normal file
31
gcc/testsuite/g++.dg/conversion/cond4.C
Normal file
@ -0,0 +1,31 @@
|
||||
// Origin: PR c++/45383
|
||||
// { dg-do run }
|
||||
|
||||
struct null {
|
||||
null() {}
|
||||
template<class T>
|
||||
operator T*() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<class C, class T>
|
||||
operator T C::*() const {
|
||||
return 0;
|
||||
}
|
||||
private:
|
||||
null(const null&);
|
||||
null& operator=(const null&);
|
||||
void operator&() const;
|
||||
};
|
||||
|
||||
static struct null null;
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
int* ptr = null;
|
||||
if (ptr == null)
|
||||
return 0;
|
||||
if (ptr != null)
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue
Block a user