Commit a26ddf11 by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

re PR c++/19375 (Access violation diagnostic given twice)

	PR c++/19375
	* semantics.c (finish_id_expression): Disable access checking for
	already lookuped FIELD_DECL.

From-SVN: r93897
parent 625d4524
2005-01-19 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/19375
* semantics.c (finish_id_expression): Disable access checking for
already lookuped FIELD_DECL.
2005-01-18 Kazu Hirata <kazu@cs.umass.edu> 2005-01-18 Kazu Hirata <kazu@cs.umass.edu>
* decl.c (delete_block): Remove. * decl.c (delete_block): Remove.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
building RTL. These routines are used both during actual parsing building RTL. These routines are used both during actual parsing
and during the instantiation of template functions. and during the instantiation of template functions.
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc. Free Software Foundation, Inc.
Written by Mark Mitchell (mmitchell@usa.net) based on code found Written by Mark Mitchell (mmitchell@usa.net) based on code found
formerly in parse.y and pt.c. formerly in parse.y and pt.c.
...@@ -2639,9 +2639,17 @@ finish_id_expression (tree id_expression, ...@@ -2639,9 +2639,17 @@ finish_id_expression (tree id_expression,
/* The same is true for FIELD_DECL, but we also need to /* The same is true for FIELD_DECL, but we also need to
make sure that the syntax is correct. */ make sure that the syntax is correct. */
else if (TREE_CODE (decl) == FIELD_DECL) else if (TREE_CODE (decl) == FIELD_DECL)
return finish_non_static_data_member {
(decl, current_class_ref, /* Since SCOPE is NULL here, this is an unqualified name.
/*qualifying_scope=*/NULL_TREE); Access checking has been performed during name lookup
already. Turn off checking to avoid duplicate errors. */
push_deferring_access_checks (dk_no_check);
decl = finish_non_static_data_member
(decl, current_class_ref,
/*qualifying_scope=*/NULL_TREE);
pop_deferring_access_checks ();
return decl;
}
return id_expression; return id_expression;
} }
...@@ -2706,8 +2714,15 @@ finish_id_expression (tree id_expression, ...@@ -2706,8 +2714,15 @@ finish_id_expression (tree id_expression,
} }
} }
else if (TREE_CODE (decl) == FIELD_DECL) else if (TREE_CODE (decl) == FIELD_DECL)
decl = finish_non_static_data_member (decl, current_class_ref, {
/*qualifying_scope=*/NULL_TREE); /* Since SCOPE is NULL here, this is an unqualified name.
Access checking has been performed during name lookup
already. Turn off checking to avoid duplicate errors. */
push_deferring_access_checks (dk_no_check);
decl = finish_non_static_data_member (decl, current_class_ref,
/*qualifying_scope=*/NULL_TREE);
pop_deferring_access_checks ();
}
else if (is_overloaded_fn (decl)) else if (is_overloaded_fn (decl))
{ {
tree first_fn = OVL_CURRENT (decl); tree first_fn = OVL_CURRENT (decl);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment