From 7979434d1d6ba9537a8e8931b36c50fd43295d6e Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 16 Sep 2002 15:15:36 +0000 Subject: [PATCH] parse.y (parse_finish_call_expr): Check lookup_member result. cp: * parse.y (parse_finish_call_expr): Check lookup_member result. testsuite: * g++.dg/lookup/scoped2.C: New test. From-SVN: r57195 --- gcc/cp/ChangeLog | 2 ++ gcc/cp/parse.y | 6 ++++++ gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/lookup/scoped2.C | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+) create mode 100644 gcc/testsuite/g++.dg/lookup/scoped2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3c3fb937d88..a4ddb5a6dc8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2002-09-16 Nathan Sidwell + * parse.y (parse_finish_call_expr): Check lookup_member result. + PR c++/7015 * semantic.c (finish_asm_stmt): Fix operand/output_operands thinko. diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 8fe244e6147..8cce99bd5c0 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -4177,6 +4177,12 @@ parse_finish_call_expr (tree fn, tree args, int koenig) name = DECL_NAME (get_first_fn (name)); fn = lookup_member (scope, name, /*protect=*/1, /*prefer_type=*/0); + if (!fn) + { + error ("'%D' has no member named '%E'", scope, name); + return error_mark_node; + } + if (BASELINK_P (fn) && template_id) BASELINK_FUNCTIONS (fn) = build_nt (TEMPLATE_ID_EXPR, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 603b39d080a..2d65752998f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2002-09-16 Nathan Sidwell + * g++.dg/lookup/scoped2.C: New test. + * g++.dg/ext/asm3.C: New test. 2002-09-16 Richard Earnshaw diff --git a/gcc/testsuite/g++.dg/lookup/scoped2.C b/gcc/testsuite/g++.dg/lookup/scoped2.C new file mode 100644 index 00000000000..80cfb1f5f00 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/scoped2.C @@ -0,0 +1,19 @@ +// { dg-do compile } + +// Copyright (C) 2002 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 16 Sep 2002 + +// Seg faulted. + +struct Base +{ +}; + +struct Derived : Base +{ + void Foo () + { + Base::Baz (); // { dg-error "has no member" "" } + + }; +};