non-negative value

diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c
index e2f2434..f3d5ad7 100644
--- a/libasn1fix/asn1fix_bitstring.c
+++ b/libasn1fix/asn1fix_bitstring.c
@@ -55,6 +55,25 @@
 				"is not an identifier", v->_lineno);
 			return -1;
 		}
+
+		/* 21.1 */
+		if(v->value == NULL) {
+			FATAL("BIT STRING NamedBit value at line %d "
+				"must be explicitly specified in braces",
+				v->_lineno);
+			return -1;
+		} else if(v->value->type == ATV_REFERENCED) {
+			/* Resolve the value */
+			if(asn1f_value_resolve(arg, v, 0))
+				return -1;
+		}
+		if(v->value->type != ATV_INTEGER
+		|| v->value->value.v_integer < 0) {
+			FATAL("BIT STRING NamedBit value at line %d: "
+				"non-negative integer value expected",
+				v->_lineno);
+			return -1;
+		}
 	}
 
 	return r_value;
diff --git a/tests/114-bit-string-SE.asn1 b/tests/114-bit-string-SE.asn1
new file mode 100644
index 0000000..5006b06
--- /dev/null
+++ b/tests/114-bit-string-SE.asn1
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .114
+
+ModuleBitStringNegativeInteger
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 114 }
+	DEFINITIONS ::=
+BEGIN
+
+	T ::= BIT STRING { one(-2) }
+
+END