diff options
| author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2004-06-01 15:51:56 +0000 |
|---|---|---|
| committer | Jason Merrill <jason@gcc.gnu.org> | 2004-06-01 11:51:56 -0400 |
| commit | 43daf8ffa83f013ccc2a7db8845375df73f5556b (patch) | |
| tree | 2def6dd5f3df50ec9750e71c7af3a314f0c66c12 /gcc/cp/init.c | |
| parent | 7a3ea2011be31e937186df05335f665a8a983028 (diff) | |
| download | gcc-43daf8ffa83f013ccc2a7db8845375df73f5556b.zip gcc-43daf8ffa83f013ccc2a7db8845375df73f5556b.tar.gz gcc-43daf8ffa83f013ccc2a7db8845375df73f5556b.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: r82551
Diffstat (limited to 'gcc/cp/init.c')
| -rw-r--r-- | gcc/cp/init.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 1c00356..5f0872e 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1368,7 +1368,7 @@ build_offset_ref (tree type, tree name, bool address_p) if (TREE_CODE (name) == TEMPLATE_DECL) return name; - if (processing_template_decl || uses_template_parms (type)) + if (dependent_type_p (type) || type_dependent_expression_p (name)) return build_min_nt (SCOPE_REF, type, name); if (TREE_CODE (name) == TEMPLATE_ID_EXPR) @@ -1450,6 +1450,14 @@ build_offset_ref (tree type, tree name, bool address_p) return error_mark_node; } + if (processing_template_decl) + { + if (TREE_CODE (orig_name) == TEMPLATE_ID_EXPR) + return build_min (SCOPE_REF, TREE_TYPE (member), type, orig_name); + else + return build_min (SCOPE_REF, TREE_TYPE (member), type, name); + } + if (TREE_CODE (member) == TYPE_DECL) { TREE_USED (member) = 1; |
