[multiple changes]

2004-11-29  Daniel Jacobowitz  <dan@codesourcery.com>

	PR c/7544
	* Makefile.in (c-lang.o): Update dependencies.
	* c-lang.c: Include "c-pragma.h".
	(finish_file): Call maybe_apply_pending_pragma_weaks.
	* c-pragma.c (maybe_apply_pending_pragma_weaks): New function.
	* c-pragma.h (maybe_apply_pending_pragma_weaks): New prototype.

cp:
2004-11-29  Daniel Jacobowitz  <dan@codesourcery.com>

	* Make-lang.in (cp/decl2.o): Update dependencies.
	* decl2.c (finish_file): Call maybe_apply_pending_pragma_weaks.

objc:
2004-11-29  Joseph Myers  <joseph@codesourcery.com>

	* Make-lang.in (objc/objc-act.o): Update dependencies.
	* objc-act.c (objc_finish_file): Call
	maybe_apply_pending_pragma_weaks if not OBJCPLUS.

testsuite:
2004-11-29  Joseph Myers  <joseph@codesourcery.com>

	* g++.dg/ext/weak1.C, gcc.dg/weak/weak-10.c, objc.dg/weak-1.m: New
	tests.

From-SVN: r91479
This commit is contained in:
Joseph Myers 2004-11-29 18:54:06 +00:00
parent b0c2dee9fb
commit 86f029aa95
15 changed files with 113 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2004-11-29 Daniel Jacobowitz <dan@codesourcery.com>
PR c/7544
* Makefile.in (c-lang.o): Update dependencies.
* c-lang.c: Include "c-pragma.h".
(finish_file): Call maybe_apply_pending_pragma_weaks.
* c-pragma.c (maybe_apply_pending_pragma_weaks): New function.
* c-pragma.h (maybe_apply_pending_pragma_weaks): New prototype.
2004-11-29 Richard Henderson <rth@redhat.com>
PR target/17224

View File

@ -1380,7 +1380,7 @@ c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(
c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(C_TREE_H) $(C_PRETTY_PRINT_H) $(DIAGNOSTIC_H) \
$(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-c.h \
c-objc-common.h
c-objc-common.h c-pragma.h
stub-objc.o : stub-objc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
$(GGC_H) $(C_COMMON_H)
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \

View File

@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "diagnostic.h"
#include "c-pretty-print.h"
#include "c-objc-common.h"
#include "c-pragma.h"
enum c_language_kind c_language = clk_c;
@ -88,6 +89,7 @@ const char *const tree_code_name[] = {
void
finish_file (void)
{
maybe_apply_pending_pragma_weaks ();
}
#include "gtype-c.h"

View File

@ -294,6 +294,33 @@ maybe_apply_pragma_weak (tree decl)
}
}
/* Process all "#pragma weak A = B" directives where we have not seen
a decl for A. */
void
maybe_apply_pending_pragma_weaks (void)
{
tree *p, t, alias_id, id, decl, *next;
for (p = &pending_weaks; (t = *p) ; p = next)
{
next = &TREE_CHAIN (t);
alias_id = TREE_PURPOSE (t);
id = TREE_VALUE (t);
if (TREE_VALUE (t) == NULL)
continue;
decl = build_decl (FUNCTION_DECL, alias_id, default_function_type);
DECL_ARTIFICIAL (decl) = 1;
TREE_PUBLIC (decl) = 1;
DECL_EXTERNAL (decl) = 1;
DECL_WEAK (decl) = 1;
assemble_alias (decl, id);
}
}
/* #pragma weak name [= value] */
static void
handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy))
@ -330,6 +357,11 @@ void
maybe_apply_pragma_weak (tree ARG_UNUSED (decl))
{
}
void
maybe_apply_pending_pragma_weaks (void)
{
}
#endif /* HANDLE_PRAGMA_WEAK */
/* GCC supports two #pragma directives for renaming the external

View File

@ -60,6 +60,7 @@ extern void c_register_pragma (const char *, const char *,
extern void c_register_pragma_with_expansion (const char *, const char *,
void (*) (struct cpp_reader *));
extern void maybe_apply_pragma_weak (tree);
extern void maybe_apply_pending_pragma_weaks (void);
extern tree maybe_apply_renaming_pragma (tree, tree);
extern void add_to_renaming_pragma_list (tree, tree);

View File

@ -1,3 +1,9 @@
2004-11-29 Daniel Jacobowitz <dan@codesourcery.com>
PR c/7544
* Make-lang.in (cp/decl2.o): Update dependencies.
* decl2.c (finish_file): Call maybe_apply_pending_pragma_weaks.
2004-11-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/18652

View File

@ -232,7 +232,8 @@ cp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) flags.h cp/decl.h \
cp/operators.def $(TM_P_H) tree-inline.h diagnostic.h c-pragma.h \
debug.h gt-cp-decl.h timevar.h $(TREE_FLOW_H)
cp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) flags.h cp/decl.h $(EXPR_H) \
output.h except.h toplev.h $(RTL_H) c-common.h gt-cp-decl2.h cgraph.h
output.h except.h toplev.h $(RTL_H) c-common.h gt-cp-decl2.h cgraph.h \
c-pragma.h
cp/cp-objcp-common.o : cp/cp-objcp-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(TREE_H) $(CXX_TREE_H) c-common.h toplev.h langhooks.h \
$(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) debug.h $(CXX_PRETTY_PRINT_H) \

View File

@ -48,6 +48,7 @@ Boston, MA 02111-1307, USA. */
#include "tree-mudflap.h"
#include "cgraph.h"
#include "tree-inline.h"
#include "c-pragma.h"
extern cpp_reader *parse_in;
@ -3062,6 +3063,9 @@ cp_finish_file (void)
if (priority_info_map)
splay_tree_delete (priority_info_map);
/* Generate any missing aliases. */
maybe_apply_pending_pragma_weaks ();
/* We're done with static constructors, so we can go back to "C++"
linkage now. */
pop_lang_context ();

View File

@ -1,3 +1,10 @@
2004-11-29 Joseph Myers <joseph@codesourcery.com>
PR c/7544
* Make-lang.in (objc/objc-act.o): Update dependencies.
* objc-act.c (objc_finish_file): Call
maybe_apply_pending_pragma_weaks if not OBJCPLUS.
2004-11-09 Andrew Pinski <pinskia@physics.uc.edu>
PR objc/18406

View File

@ -73,7 +73,7 @@ objc/objc-act.o : objc/objc-act.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(TM_P_H) \
$(EXPR_H) $(TARGET_H) $(C_TREE_H) diagnostic.h toplev.h flags.h \
objc/objc-act.h input.h function.h output.h debug.h langhooks.h \
$(LANGHOOKS_DEF_H) $(HASHTAB_H) gt-objc-objc-act.h
$(LANGHOOKS_DEF_H) $(HASHTAB_H) c-pragma.h gt-objc-objc-act.h
objc.srcextra: objc/objc-parse.c objc/objc-parse.y
-cp -p $^ $(srcdir)/objc

View File

@ -55,6 +55,7 @@ Boston, MA 02111-1307, USA. */
#endif
#include "c-common.h"
#include "c-pragma.h"
#include "flags.h"
#include "langhooks.h"
#include "objc-act.h"
@ -602,6 +603,8 @@ objc_finish_file (void)
#ifdef OBJCPLUS
cp_finish_file ();
#else
maybe_apply_pending_pragma_weaks ();
#endif
}

View File

@ -1,3 +1,9 @@
2004-11-29 Joseph Myers <joseph@codesourcery.com>
PR c/7544
* g++.dg/ext/weak1.C, gcc.dg/weak/weak-10.c, objc.dg/weak-1.m: New
tests.
2004-11-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/18652

View File

@ -0,0 +1,13 @@
// Test for #pragma weak where the weak alias symbol isn't declared,
// although the symbol it is an alias for is defined in the
// translation unit. Bug 7544.
// Origin: Joseph Myers <joseph@codesourcery.com>
// { dg-do compile }
// { dg-require-weak "" }
// { dg-require-alias "" }
// { dg-options "-fno-common" }
// { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?bar1" } }
#pragma weak bar1 = foo1
extern "C" void foo1 (void) {}

View File

@ -0,0 +1,13 @@
/* Test for #pragma weak where the weak alias symbol isn't declared,
although the symbol it is an alias for is defined in the
translation unit. Bug 7544. */
/* Origin: Joseph Myers <joseph@codesourcery.com> */
/* { dg-do compile } */
/* { dg-require-weak "" } */
/* { dg-require-alias "" } */
/* { dg-options "-fno-common" } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?bar1" } } */
#pragma weak bar1 = foo1
void foo1 (void) {}

View File

@ -0,0 +1,13 @@
/* Test for #pragma weak where the weak alias symbol isn't declared,
although the symbol it is an alias for is defined in the
translation unit. Bug 7544. */
/* Origin: Joseph Myers <joseph@codesourcery.com> */
/* { dg-do compile } */
/* { dg-require-weak "" } */
/* { dg-require-alias "" } */
/* { dg-options "-fno-common" } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?bar1" } } */
#pragma weak bar1 = foo1
void foo1 (void) {}