diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2004-06-01 11:54:33 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2004-06-01 11:54:33 -0400 |
commit | c1d34f9050f4a44b52ae4b95a10a1a8d3b42061a (patch) | |
tree | 2c5a6e3f7c2f6957d79b50267b40c99537d58b30 | |
parent | 3ff2f9d1d1316c01f2880e6408116cdc5e928ae0 (diff) | |
download | gcc-c1d34f9050f4a44b52ae4b95a10a1a8d3b42061a.zip gcc-c1d34f9050f4a44b52ae4b95a10a1a8d3b42061a.tar.gz gcc-c1d34f9050f4a44b52ae4b95a10a1a8d3b42061a.tar.bz2 |
re PR c++/13092 (Accepts invalid pointer-to-member conversion)
PR c++/13092
* init.c (build_offset_ref): Build SCOPE_REF with non-null
TREE_TYPE for non-dependent names.
* pt.c (type_dependent_expression_p): Handle SCOPE_REF with
unknown_type_node as its TREE_TYPE.
* cxx-pretty_print.c (pp_cxx_unqualified_id): Handle BASELINK.
* error.c (dump_decl) <SCOPE_REF case>: Use pp_expression.
(dump_expr) <SCOPE_REF case>: Likewise.
From-SVN: r82553
-rw-r--r-- | gcc/testsuite/g++.dg/template/non-dependent10.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/non-dependent7.C | 22 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/non-dependent8.C | 22 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/non-dependent9.C | 22 |
4 files changed, 87 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/template/non-dependent10.C b/gcc/testsuite/g++.dg/template/non-dependent10.C new file mode 100644 index 0000000..369e137 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent10.C @@ -0,0 +1,21 @@ +// { dg-do compile } + +// Origin: Giovanni Bajo <giovannibajo@libero.it> + +// Two-phase name lookup for address of member: +// Detecting error during parsing + +struct S +{ + char i; +}; + +template<int S::*p> +struct X +{}; + +template <class T> +struct Foo +{ + X<&S::i> x; // { dg-error "convert|no type" } +}; diff --git a/gcc/testsuite/g++.dg/template/non-dependent7.C b/gcc/testsuite/g++.dg/template/non-dependent7.C new file mode 100644 index 0000000..c046312 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent7.C @@ -0,0 +1,22 @@ +// { dg-do compile } + +// Origin: Giovanni Bajo <giovannibajo@libero.it> + +// Two-phase name lookup for address of member: +// Overloading function + +struct S +{ + int f(); + int f(int); +}; + +template<int (S::*p)()> +struct X +{}; + +template <class T> +struct Foo +{ + X<&S::f> x; +}; diff --git a/gcc/testsuite/g++.dg/template/non-dependent8.C b/gcc/testsuite/g++.dg/template/non-dependent8.C new file mode 100644 index 0000000..0adac25 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent8.C @@ -0,0 +1,22 @@ +// { dg-do compile } + +// Origin: Giovanni Bajo <giovannibajo@libero.it> + +// Two-phase name lookup for address of member: +// Detecting overloading function error during parsing + +struct S +{ + int f(char); + int f(int); +}; + +template<int (S::*p)()> +struct X +{}; + +template <class T> +struct Foo +{ + X<&S::f> x; // { dg-error "convert|no type" } +}; diff --git a/gcc/testsuite/g++.dg/template/non-dependent9.C b/gcc/testsuite/g++.dg/template/non-dependent9.C new file mode 100644 index 0000000..ee34327 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent9.C @@ -0,0 +1,22 @@ +// { dg-do compile } + +// Origin: Giovanni Bajo <giovannibajo@libero.it> + +// PR c++/13092: ICE taking address of member which is non-dependent + +struct S +{ + int i; +}; + +template<int S::*p> +struct X +{}; + +template <class T> +struct Foo +{ + X<&S::i> x; +}; + +template struct Foo<void>; |