Commit ea3d83a7 by Mark Mitchell Committed by Danny Smith

re PR c++/16924 (dllexport attribute now causes some symbols _not_ to be exported)

	PR c++/16924
	* config/i386/winnt.c (i386_pe_mark_dllexport): Set
	SYMBOL_REF_DECL.
	(i386_pe_mark_dllimport): Likewise.
	(i386_pe_encode_section_info): Likewise, when overriding
	dllimport attribute.

From-SVN: r85924
parent 3fee54be
2004-08-13 Mark Mitchell <mark@codesourcery.com>
PR c++/16924
* config/i386/winnt.c (i386_pe_mark_dllexport): Set
SYMBOL_REF_DECL.
(i386_pe_mark_dllimport): Likewise.
(i386_pe_encode_section_info): Likewise, when overriding
dllimport attribute.
2004-08-12 Geoffrey Keating <geoffk@apple.com> 2004-08-12 Geoffrey Keating <geoffk@apple.com>
* configure.ac: When testing for flex, nm, ar, and bison, check * configure.ac: When testing for flex, nm, ar, and bison, check
......
...@@ -241,6 +241,7 @@ i386_pe_mark_dllexport (tree decl) ...@@ -241,6 +241,7 @@ i386_pe_mark_dllexport (tree decl)
const char *oldname; const char *oldname;
char *newname; char *newname;
rtx rtlname; rtx rtlname;
rtx symref;
tree idp; tree idp;
rtlname = XEXP (DECL_RTL (decl), 0); rtlname = XEXP (DECL_RTL (decl), 0);
...@@ -271,8 +272,9 @@ i386_pe_mark_dllexport (tree decl) ...@@ -271,8 +272,9 @@ i386_pe_mark_dllexport (tree decl)
identical. */ identical. */
idp = get_identifier (newname); idp = get_identifier (newname);
XEXP (DECL_RTL (decl), 0) = symref = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp)); SYMBOL_REF_DECL (symref) = decl;
XEXP (DECL_RTL (decl), 0) = symref;
} }
/* Mark a DECL as being dllimport'd. */ /* Mark a DECL as being dllimport'd. */
...@@ -284,6 +286,7 @@ i386_pe_mark_dllimport (tree decl) ...@@ -284,6 +286,7 @@ i386_pe_mark_dllimport (tree decl)
char *newname; char *newname;
tree idp; tree idp;
rtx rtlname, newrtl; rtx rtlname, newrtl;
rtx symref;
rtlname = XEXP (DECL_RTL (decl), 0); rtlname = XEXP (DECL_RTL (decl), 0);
if (GET_CODE (rtlname) == SYMBOL_REF) if (GET_CODE (rtlname) == SYMBOL_REF)
...@@ -320,9 +323,9 @@ i386_pe_mark_dllimport (tree decl) ...@@ -320,9 +323,9 @@ i386_pe_mark_dllimport (tree decl)
identical. */ identical. */
idp = get_identifier (newname); idp = get_identifier (newname);
newrtl = gen_rtx_MEM (Pmode, symref = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
gen_rtx_SYMBOL_REF (Pmode, SYMBOL_REF_DECL (symref) = decl;
IDENTIFIER_POINTER (idp))); newrtl = gen_rtx_MEM (Pmode,symref);
XEXP (DECL_RTL (decl), 0) = newrtl; XEXP (DECL_RTL (decl), 0) = newrtl;
/* Can't treat a pointer to this as a constant address */ /* Can't treat a pointer to this as a constant address */
...@@ -450,7 +453,13 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first) ...@@ -450,7 +453,13 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first)
/* Remove DLL_IMPORT_PREFIX. */ /* Remove DLL_IMPORT_PREFIX. */
tree idp = get_identifier (oldname + strlen (DLL_IMPORT_PREFIX)); tree idp = get_identifier (oldname + strlen (DLL_IMPORT_PREFIX));
rtx newrtl = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp)); rtx symref = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
SYMBOL_REF_DECL (symref) = decl;
XEXP (DECL_RTL (decl), 0) = symref;
DECL_NON_ADDR_CONST_P (decl) = 0;
/* We previously set TREE_PUBLIC and DECL_EXTERNAL.
We leave these alone for now. */
if (DECL_INITIAL (decl) || !DECL_EXTERNAL (decl)) if (DECL_INITIAL (decl) || !DECL_EXTERNAL (decl))
warning ("%J'%D' defined locally after being " warning ("%J'%D' defined locally after being "
...@@ -458,13 +467,6 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first) ...@@ -458,13 +467,6 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first)
else else
warning ("%J'%D' redeclared without dllimport attribute " warning ("%J'%D' redeclared without dllimport attribute "
"after being referenced with dllimport linkage", decl, decl); "after being referenced with dllimport linkage", decl, decl);
XEXP (DECL_RTL (decl), 0) = newrtl;
DECL_NON_ADDR_CONST_P (decl) = 0;
/* We previously set TREE_PUBLIC and DECL_EXTERNAL.
We leave these alone for now. */
} }
} }
......
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