Commit 2ef06beb by Mark Mitchell Committed by Mark Mitchell

re PR c++/25999 (compiler loses extern "C" for function after #pragma weak)

	PR c++/25999
	* decl.c (start_preparsed_function): Call maybe_apply_pragma_weak
	here, not ...
	(start_function): ... here.
	PR c++/25999
	* g++.dg/ext/pragmaweak1.C: New test.

From-SVN: r110340
parent 5f1f4746
2006-01-28 Mark Mitchell <mark@codesourcery.com>
PR c++/25999
* decl.c (start_preparsed_function): Call maybe_apply_pragma_weak
here, not ...
(start_function): ... here.
2006-01-28 Mark Mitchell <mark@codesourcery.com>
PR c++/25855
* class.c (resolve_address_of_overloaded_function): Adjust use of
return value from most_specialized_instantiation.
......
......@@ -10287,6 +10287,17 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
}
fntype = TREE_TYPE (decl1);
/* If #pragma weak applies, mark the decl appropriately now.
The pragma only applies to global functions. Because
determining whether or not the #pragma applies involves
computing the mangled name for the declaration, we cannot
apply the pragma until after we have merged this declaration
with any previous declarations; if the original declaration
has a linkage specification, that specification applies to
the definition as well, and may affect the mangled name. */
if (!DECL_CONTEXT (decl1))
maybe_apply_pragma_weak (decl1);
}
/* Determine the ELF visibility attribute for the function. We must
......@@ -10458,10 +10469,6 @@ start_function (cp_decl_specifier_seq *declspecs,
if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
return 0;
/* If #pragma weak was used, mark the decl weak now. */
if (global_scope_p (current_binding_level))
maybe_apply_pragma_weak (decl1);
if (DECL_MAIN_P (decl1))
/* main must return int. grokfndecl should have corrected it
(and issued a diagnostic) if the user got it wrong. */
......
2006-01-28 Mark Mitchell <mark@codesourcery.com>
PR c++/25999
* g++.dg/ext/pragmaweak1.C: New test.
2006-01-28 Mark Mitchell <mark@codesourcery.com>
PR c++/25855
* g++.dg/template/spec29.C: New test.
// PR c++/25999
// { dg-final { scan-assembler-not "_Z3Foov" } }
extern "C" {
void Foo();
}
#pragma weak Random_Symbol
void Foo() { }
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