mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
3fee54be32
commit
ea3d83a77f
|
|
@ -1,3 +1,12 @@
|
|||
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>
|
||||
|
||||
* configure.ac: When testing for flex, nm, ar, and bison, check
|
||||
|
|
|
|||
|
|
@ -241,6 +241,7 @@ i386_pe_mark_dllexport (tree decl)
|
|||
const char *oldname;
|
||||
char *newname;
|
||||
rtx rtlname;
|
||||
rtx symref;
|
||||
tree idp;
|
||||
|
||||
rtlname = XEXP (DECL_RTL (decl), 0);
|
||||
|
|
@ -271,8 +272,9 @@ i386_pe_mark_dllexport (tree decl)
|
|||
identical. */
|
||||
idp = get_identifier (newname);
|
||||
|
||||
XEXP (DECL_RTL (decl), 0) =
|
||||
gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
|
||||
symref = 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. */
|
||||
|
|
@ -284,6 +286,7 @@ i386_pe_mark_dllimport (tree decl)
|
|||
char *newname;
|
||||
tree idp;
|
||||
rtx rtlname, newrtl;
|
||||
rtx symref;
|
||||
|
||||
rtlname = XEXP (DECL_RTL (decl), 0);
|
||||
if (GET_CODE (rtlname) == SYMBOL_REF)
|
||||
|
|
@ -320,9 +323,9 @@ i386_pe_mark_dllimport (tree decl)
|
|||
identical. */
|
||||
idp = get_identifier (newname);
|
||||
|
||||
newrtl = gen_rtx_MEM (Pmode,
|
||||
gen_rtx_SYMBOL_REF (Pmode,
|
||||
IDENTIFIER_POINTER (idp)));
|
||||
symref = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
|
||||
SYMBOL_REF_DECL (symref) = decl;
|
||||
newrtl = gen_rtx_MEM (Pmode,symref);
|
||||
XEXP (DECL_RTL (decl), 0) = newrtl;
|
||||
|
||||
/* 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)
|
|||
|
||||
/* Remove 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))
|
||||
warning ("%J'%D' defined locally after being "
|
||||
|
|
@ -458,13 +467,6 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first)
|
|||
else
|
||||
warning ("%J'%D' redeclared without dllimport attribute "
|
||||
"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. */
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue