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;
/* 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;
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. */
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);
}
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
--- /dev/null
+label:
+label2
+label3
+
+ jmp label
+ jmp label2
+
+equ2: equ 5
+equ3 equ 5
+label5: times 2 db 5
+label4 times 2 db 5
+
--- /dev/null
+eb
+fe
+eb
+fc
+05
+05
+05
+05
--- /dev/null
+# $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
--- /dev/null
+#! /bin/sh
+# $IdPath$
+${srcdir}/out_test.sh nasm_test modules/parsers/nasm/tests/worphan "nasm-compat parser" "-Worphan-labels -f bin" ""
+exit $?
--- /dev/null
+label:
+label2
+label3
+
+ jmp label
+ jmp label2
+
+equ2: equ 5
+equ3 equ 5
+label5: times 2 db 5
+label4 times 2 db 5
+
--- /dev/null
+-: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
--- /dev/null
+eb
+fe
+eb
+fc
+05
+05
+05
+05