]> granicus.if.org Git - yasm/commitdiff
* errwarn.h (yasm_warn_class): Add new class YASM_WARN_ORPHAN_LABEL.
authorPeter Johnson <peter@tortall.net>
Sat, 4 Sep 2004 00:25:20 +0000 (00:25 -0000)
committerPeter Johnson <peter@tortall.net>
Sat, 4 Sep 2004 00:25:20 +0000 (00:25 -0000)
* errwarn.c (yasm_errwarn_initialize): Disable YASM_WARN_ORPHAN_LABEL by
default.

* nasm-bison.y (lineexp): Warn (controlled by YASM_WARN_ORPHAN_LABEL) on
labels alone on a line without a colon.

* yasm.c (opt_warning_handler): Add option "-Worphan-labels" (and
"-Wno-orphan-labels" to enable/disable YASM_WARN_ORPHAN_LABEL.

* nasm/tests/worphan/*: Test YASM_WARN_ORPHAN_LABEL warning.
* nasm/tests/orphannowarn.*: Likewise (for disabled case).
* nasm/tests/Makefile.inc: Include worphan tests.

Bugzilla Bug 35
Reported By: vclaudepierre@tiscali.fr

svn path=/trunk/yasm/; revision=1135

13 files changed:
frontends/yasm/yasm.c
libyasm/errwarn.c
libyasm/errwarn.h
modules/parsers/nasm/nasm-bison.y
modules/parsers/nasm/tests/Makefile.inc
modules/parsers/nasm/tests/orphannowarn.asm [new file with mode: 0644]
modules/parsers/nasm/tests/orphannowarn.errwarn [new file with mode: 0644]
modules/parsers/nasm/tests/orphannowarn.hex [new file with mode: 0644]
modules/parsers/nasm/tests/worphan/Makefile.inc [new file with mode: 0644]
modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh [new file with mode: 0755]
modules/parsers/nasm/tests/worphan/orphanwarn.asm [new file with mode: 0644]
modules/parsers/nasm/tests/worphan/orphanwarn.errwarn [new file with mode: 0644]
modules/parsers/nasm/tests/worphan/orphanwarn.hex [new file with mode: 0644]

index 33e38fa3b9841e41b8b305d8656ed88b933525f6..3616a143f663234a7b9cd6c256f38a8434ed35d8 100644 (file)
@@ -892,6 +892,11 @@ opt_warning_handler(char *cmd, /*@unused@*/ char *param, int extra)
            yasm_warn_enable(YASM_WARN_UNREC_CHAR);
        else
            yasm_warn_disable(YASM_WARN_UNREC_CHAR);
+    } else if (strcmp(cmd, "orphan-labels") == 0) {
+       if (enable)
+           yasm_warn_enable(YASM_WARN_ORPHAN_LABEL);
+       else
+           yasm_warn_disable(YASM_WARN_ORPHAN_LABEL);
     } else
        return 1;
 
index 9d2c93829af52cbe0da8bb744b716ce0aed38301..2d175bce5b580484129cdcf8148caa793c101503 100644 (file)
@@ -100,7 +100,7 @@ yasm_errwarn_initialize(void)
     /* Default enabled warnings.  See errwarn.h for a list. */
     warn_class_enabled = 
        (1UL<<YASM_WARN_GENERAL) | (1UL<<YASM_WARN_UNREC_CHAR) |
-       (1UL<<YASM_WARN_PREPROC);
+       (1UL<<YASM_WARN_PREPROC) | (0UL<<YASM_WARN_ORPHAN_LABEL);
 
     error_count = 0;
     warning_count = 0;
index 67c6dfd5a82e072a500c4923eb27e57903f0231b..c014cde932d7b5dc3fac8a1ac00d85dd347ec9c3 100644 (file)
@@ -38,7 +38,8 @@
 typedef enum {
     YASM_WARN_GENERAL = 0,  /**< Non-specific warnings */
     YASM_WARN_UNREC_CHAR,   /**< Unrecognized characters (while tokenizing) */
-    YASM_WARN_PREPROC      /**< Preprocessor warnings */
+    YASM_WARN_PREPROC,     /**< Preprocessor warnings */
+    YASM_WARN_ORPHAN_LABEL  /**< Label alone on a line without a colon */
 } yasm_warn_class;
 
 /** Initialize any internal data structures. */
index 6d4642beebad6b4a0a0d38f4ab68751293ce6160..0af6b45acddb4ceb4e4e1f52df1c6ad56258e56a 100644 (file)
@@ -158,7 +158,13 @@ line: '\n'         { $$ = (yasm_bytecode *)NULL; }
 
 lineexp: exp
     | TIMES expr exp           { $$ = $3; yasm_bc_set_multiple($$, $2); }
-    | label                    {
+    | label_id                 {
+       yasm__warning(YASM_WARN_ORPHAN_LABEL, cur_line,
+                     N_("label alone on a line without a colon might be in error"));
+       $$ = (yasm_bytecode *)NULL;
+       define_label(parser_nasm, $1.name, $1.local);
+    }
+    | label_id ':'             {
        $$ = (yasm_bytecode *)NULL;
        define_label(parser_nasm, $1.name, $1.local);
     }
index c17fd86a21eee1ce02d724220472174a1305a56e..bfd1941a7217153e729226ba666ac356a4d06f0f 100644 (file)
@@ -18,3 +18,7 @@ EXTRA_DIST += modules/parsers/nasm/tests/newsect.hex
 EXTRA_DIST += modules/parsers/nasm/tests/prevlocalwarn.asm
 EXTRA_DIST += modules/parsers/nasm/tests/prevlocalwarn.errwarn
 EXTRA_DIST += modules/parsers/nasm/tests/prevlocalwarn.hex
+
+EXTRA_DIST += modules/parsers/nasm/tests/worphan/Makefile.inc
+
+include modules/parsers/nasm/tests/worphan/Makefile.inc
diff --git a/modules/parsers/nasm/tests/orphannowarn.asm b/modules/parsers/nasm/tests/orphannowarn.asm
new file mode 100644 (file)
index 0000000..ebf6c0b
--- /dev/null
@@ -0,0 +1,12 @@
+label:
+label2
+label3
+
+       jmp     label
+       jmp     label2
+
+equ2: equ 5
+equ3 equ 5
+label5: times 2 db 5
+label4 times 2 db 5
+
diff --git a/modules/parsers/nasm/tests/orphannowarn.errwarn b/modules/parsers/nasm/tests/orphannowarn.errwarn
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/modules/parsers/nasm/tests/orphannowarn.hex b/modules/parsers/nasm/tests/orphannowarn.hex
new file mode 100644 (file)
index 0000000..3a32a00
--- /dev/null
@@ -0,0 +1,8 @@
+eb 
+fe 
+eb 
+fc 
+05 
+05 
+05 
+05 
diff --git a/modules/parsers/nasm/tests/worphan/Makefile.inc b/modules/parsers/nasm/tests/worphan/Makefile.inc
new file mode 100644 (file)
index 0000000..50aecf6
--- /dev/null
@@ -0,0 +1,8 @@
+# $IdPath$
+
+TESTS += modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh
+
+EXTRA_DIST += modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh
+EXTRA_DIST += modules/parsers/nasm/tests/worphan/orphanwarn.asm
+EXTRA_DIST += modules/parsers/nasm/tests/worphan/orphanwarn.errwarn
+EXTRA_DIST += modules/parsers/nasm/tests/worphan/orphanwarn.hex
diff --git a/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh b/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh
new file mode 100755 (executable)
index 0000000..6a11db3
--- /dev/null
@@ -0,0 +1,4 @@
+#! /bin/sh
+# $IdPath$
+${srcdir}/out_test.sh nasm_test modules/parsers/nasm/tests/worphan "nasm-compat parser" "-Worphan-labels -f bin" ""
+exit $?
diff --git a/modules/parsers/nasm/tests/worphan/orphanwarn.asm b/modules/parsers/nasm/tests/worphan/orphanwarn.asm
new file mode 100644 (file)
index 0000000..ebf6c0b
--- /dev/null
@@ -0,0 +1,12 @@
+label:
+label2
+label3
+
+       jmp     label
+       jmp     label2
+
+equ2: equ 5
+equ3 equ 5
+label5: times 2 db 5
+label4 times 2 db 5
+
diff --git a/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn b/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn
new file mode 100644 (file)
index 0000000..0953e81
--- /dev/null
@@ -0,0 +1,2 @@
+-:2: warning: label alone on aline without a colon might be in error
+-:3: warning: label alone on aline without a colon might be in error
diff --git a/modules/parsers/nasm/tests/worphan/orphanwarn.hex b/modules/parsers/nasm/tests/worphan/orphanwarn.hex
new file mode 100644 (file)
index 0000000..3a32a00
--- /dev/null
@@ -0,0 +1,8 @@
+eb 
+fe 
+eb 
+fc 
+05 
+05 
+05 
+05