]> granicus.if.org Git - yasm/commitdiff
Allow multiple EXTERN's of same variable without error (NASM's behavior).
authorPeter Johnson <peter@tortall.net>
Tue, 20 Nov 2001 23:30:19 +0000 (23:30 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 20 Nov 2001 23:30:19 +0000 (23:30 -0000)
svn path=/trunk/yasm/; revision=354

libyasm/symrec.c
src/symrec.c
tests/nasm/multiext.asm [new file with mode: 0644]

index 243391e7903cebd3219e6aaf21c50c507c1aefbb..c426f5f436645211aaf8675f64758bcb70368c8b 100644 (file)
@@ -162,7 +162,7 @@ symrec_declare(const char *name, SymVisibility vis)
 
     /* Don't allow EXTERN and COMMON if symbol has already been DEFINED. */
     /* Also, EXTERN and COMMON are mutually exclusive. */
-    if ((rec->status & SYM_DEFINED) ||
+    if (((rec->status & SYM_DEFINED) && !(rec->visibility & SYM_EXTERN)) ||
        ((rec->visibility & SYM_COMMON) && (vis == SYM_EXTERN)) ||
        ((rec->visibility & SYM_EXTERN) && (vis == SYM_COMMON))) {
        Error(_("duplicate definition of `%s'; first defined on line %d"),
index 243391e7903cebd3219e6aaf21c50c507c1aefbb..c426f5f436645211aaf8675f64758bcb70368c8b 100644 (file)
@@ -162,7 +162,7 @@ symrec_declare(const char *name, SymVisibility vis)
 
     /* Don't allow EXTERN and COMMON if symbol has already been DEFINED. */
     /* Also, EXTERN and COMMON are mutually exclusive. */
-    if ((rec->status & SYM_DEFINED) ||
+    if (((rec->status & SYM_DEFINED) && !(rec->visibility & SYM_EXTERN)) ||
        ((rec->visibility & SYM_COMMON) && (vis == SYM_EXTERN)) ||
        ((rec->visibility & SYM_EXTERN) && (vis == SYM_COMMON))) {
        Error(_("duplicate definition of `%s'; first defined on line %d"),
diff --git a/tests/nasm/multiext.asm b/tests/nasm/multiext.asm
new file mode 100644 (file)
index 0000000..2845428
--- /dev/null
@@ -0,0 +1,2 @@
+[extern blah]
+[extern blah]