decl2.c (mark_used): Set the source location of the used decl to the current input location here...
* decl2.c (mark_used): Set the source location of the used decl to the current input location here... * method.c (synthesize_method): ... not here. Set input_location from the decl instead. From-SVN: r95070
This commit is contained in:
parent
83cc36c826
commit
39a87435bc
|
@ -1,3 +1,10 @@
|
||||||
|
2005-02-15 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
* decl2.c (mark_used): Set the source location of the used decl to
|
||||||
|
the current input location here...
|
||||||
|
* method.c (synthesize_method): ... not here. Set input_location
|
||||||
|
from the decl instead.
|
||||||
|
|
||||||
2005-02-14 Nathan Sidwell <nathan@codesourcery.com>
|
2005-02-14 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
PR c++/19608
|
PR c++/19608
|
||||||
|
|
|
@ -3161,9 +3161,20 @@ mark_used (tree decl)
|
||||||
&& DECL_ARTIFICIAL (decl)
|
&& DECL_ARTIFICIAL (decl)
|
||||||
&& !DECL_THUNK_P (decl)
|
&& !DECL_THUNK_P (decl)
|
||||||
&& ! DECL_INITIAL (decl)
|
&& ! DECL_INITIAL (decl)
|
||||||
/* Kludge: don't synthesize for default args. */
|
/* Kludge: don't synthesize for default args. Unfortunately this
|
||||||
|
rules out initializers of namespace-scoped objects too, but
|
||||||
|
it's sort-of ok if the implicit ctor or dtor decl keeps
|
||||||
|
pointing to the class location. */
|
||||||
&& current_function_decl)
|
&& current_function_decl)
|
||||||
{
|
{
|
||||||
|
/* Put the function definition at the position where it is needed,
|
||||||
|
rather than within the body of the class. That way, an error
|
||||||
|
during the generation of the implicit body points at the place
|
||||||
|
where the attempt to generate the function occurs, giving the
|
||||||
|
user a hint as to why we are attempting to generate the
|
||||||
|
function. */
|
||||||
|
DECL_SOURCE_LOCATION (decl) = input_location;
|
||||||
|
|
||||||
synthesize_method (decl);
|
synthesize_method (decl);
|
||||||
/* If we've already synthesized the method we don't need to
|
/* If we've already synthesized the method we don't need to
|
||||||
instantiate it, so we can return right away. */
|
instantiate it, so we can return right away. */
|
||||||
|
|
|
@ -705,12 +705,15 @@ synthesize_method (tree fndecl)
|
||||||
tree context = decl_function_context (fndecl);
|
tree context = decl_function_context (fndecl);
|
||||||
bool need_body = true;
|
bool need_body = true;
|
||||||
tree stmt;
|
tree stmt;
|
||||||
|
location_t save_input_location = input_location;
|
||||||
|
|
||||||
/* If we've been asked to synthesize a clone, just synthesize the
|
/* If we've been asked to synthesize a clone, just synthesize the
|
||||||
cloned function instead. Doing so will automatically fill in the
|
cloned function instead. Doing so will automatically fill in the
|
||||||
body for the clone. */
|
body for the clone. */
|
||||||
if (DECL_CLONED_FUNCTION_P (fndecl))
|
if (DECL_CLONED_FUNCTION_P (fndecl))
|
||||||
{
|
{
|
||||||
|
DECL_SOURCE_LOCATION (DECL_CLONED_FUNCTION (fndecl)) =
|
||||||
|
DECL_SOURCE_LOCATION (fndecl);
|
||||||
synthesize_method (DECL_CLONED_FUNCTION (fndecl));
|
synthesize_method (DECL_CLONED_FUNCTION (fndecl));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -724,13 +727,7 @@ synthesize_method (tree fndecl)
|
||||||
else if (nested)
|
else if (nested)
|
||||||
push_function_context_to (context);
|
push_function_context_to (context);
|
||||||
|
|
||||||
/* Put the function definition at the position where it is needed,
|
input_location = DECL_SOURCE_LOCATION (fndecl);
|
||||||
rather than within the body of the class. That way, an error
|
|
||||||
during the generation of the implicit body points at the place
|
|
||||||
where the attempt to generate the function occurs, giving the
|
|
||||||
user a hint as to why we are attempting to generate the
|
|
||||||
function. */
|
|
||||||
DECL_SOURCE_LOCATION (fndecl) = input_location;
|
|
||||||
|
|
||||||
start_preparsed_function (fndecl, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED);
|
start_preparsed_function (fndecl, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED);
|
||||||
stmt = begin_function_body ();
|
stmt = begin_function_body ();
|
||||||
|
@ -761,6 +758,8 @@ synthesize_method (tree fndecl)
|
||||||
finish_function_body (stmt);
|
finish_function_body (stmt);
|
||||||
expand_or_defer_fn (finish_function (0));
|
expand_or_defer_fn (finish_function (0));
|
||||||
|
|
||||||
|
input_location = save_input_location;
|
||||||
|
|
||||||
if (! context)
|
if (! context)
|
||||||
pop_from_top_level ();
|
pop_from_top_level ();
|
||||||
else if (nested)
|
else if (nested)
|
||||||
|
|
Loading…
Reference in New Issue