summaryrefslogtreecommitdiff
path: root/gcc/c-pragma.c
diff options
context:
space:
mode:
authorwood <wood@138bc75d-0d04-0410-961f-82ee72b054a4>1992-07-01 12:58:09 +0000
committerwood <wood@138bc75d-0d04-0410-961f-82ee72b054a4>1992-07-01 12:58:09 +0000
commit91af02e145f28f2be668fd94e3db4f095bd8abae (patch)
treec6909f7341d467275d2b569db10ee820a9792648 /gcc/c-pragma.c
parentbc38d404aef1ef794d5493f3457c507a5233cf8a (diff)
downloadgcc-91af02e145f28f2be668fd94e3db4f095bd8abae.tar.gz
Undo rcs botch
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@1370 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-pragma.c')
-rw-r--r--gcc/c-pragma.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index e8324caf4e4..934318e9dbf 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -23,12 +23,20 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifdef HANDLE_SYSV_PRAGMA
+/* Support #pragma weak by default if WEAK_ASM_OP is defined. */
+#if !defined (HANDLE_PRAGMA_WEAK) && defined (WEAK_ASM_OP)
+#define HANDLE_PRAGMA_WEAK 1
+#endif
+
/* When structure field packing is in effect, this variable is the
number of bits to use as the maximum alignment. When packing is not
in effect, this is zero. */
extern int maximum_field_alignment;
+/* File used for outputting assembler code. */
+extern FILE *asm_out_file;
+
/* Handle one token of a pragma directive. TOKEN is the
current token, and STRING is its printable form. */
@@ -64,27 +72,30 @@ handle_pragma_token (string, token)
else
warning ("malformed `#pragma pack'");
}
-#ifdef WEAK_ASM_OP
else if (type == ps_weak)
{
- if (state == ps_name || state == ps_value)
+#ifdef HANDLE_PRAGMA_WEAK
+ if (HANDLE_PRAGMA_WEAK)
{
- fprintf (asm_out_file, "\t%s\t", WEAK_ASM_OP);
- ASM_OUTPUT_LABELREF (asm_out_file, name);
- fputc ('\n', asm_out_file);
- if (state == ps_value)
+ if (state == ps_name || state == ps_value)
{
- fprintf (asm_out_file, "\t%s\t", SET_ASM_OP);
+ fprintf (asm_out_file, "\t%s\t", WEAK_ASM_OP);
ASM_OUTPUT_LABELREF (asm_out_file, name);
- fputc (',', asm_out_file);
- ASM_OUTPUT_LABELREF (asm_out_file, value);
fputc ('\n', asm_out_file);
+ if (state == ps_value)
+ {
+ fprintf (asm_out_file, "\t%s\t", SET_ASM_OP);
+ ASM_OUTPUT_LABELREF (asm_out_file, name);
+ fputc (',', asm_out_file);
+ ASM_OUTPUT_LABELREF (asm_out_file, value);
+ fputc ('\n', asm_out_file);
+ }
}
+ else if (! (state == ps_done || state == ps_start))
+ warning ("malformed `#pragma weak'");
}
- else if (! (state == ps_done || state == ps_start))
- warning ("malformed `#pragma weak'");
+#endif /* HANDLE_PRAMA_WEAK */
}
-#endif /* WEAK_ASM_OP */
type = state = ps_start;
return;
@@ -97,10 +108,8 @@ handle_pragma_token (string, token)
{
if (strcmp (IDENTIFIER_POINTER (token), "pack") == 0)
type = state = ps_pack;
-#ifdef WEAK_ASM_OP
else if (strcmp (IDENTIFIER_POINTER (token), "weak") == 0)
type = state = ps_weak;
-#endif
else
type = state = ps_done;
}
@@ -108,7 +117,6 @@ handle_pragma_token (string, token)
type = state = ps_done;
break;
-#ifdef WEAK_ASM_OP
case ps_weak:
if (token && TREE_CODE (token) == IDENTIFIER_NODE)
{
@@ -136,7 +144,6 @@ handle_pragma_token (string, token)
case ps_value:
state = ps_bad;
break;
-#endif /* WEAK_ASM_OP */
case ps_pack:
if (strcmp (string, "(") == 0)