generate constraints differently to avoid warnings
diff --git a/configure.ac b/configure.ac
index 92b04c2..65e5549 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,7 +132,7 @@
     [Enable tests for 32-bit compatibility])],
     [enable_test_32bit=$enableval], [enable_test_32bit=no])
 AS_IF([test "x$enable_test_32bit" != xno], [
-    AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32=-m32],
+    AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32="-m32 -DEXPLICIT_32BIT"],
       [
         CFLAGS_M32=""
         AC_MSG_FAILURE([--enable-test-32bit=$enable_test_32bit is requested but not supported by the _AC_LANG compiler])
diff --git a/libasn1compiler/asn1c_constraint.c b/libasn1compiler/asn1c_constraint.c
index 52874b3..0242321 100644
--- a/libasn1compiler/asn1c_constraint.c
+++ b/libasn1compiler/asn1c_constraint.c
@@ -12,7 +12,10 @@
 static int emit_value_determination_code(arg_t *arg, asn1p_expr_type_e etype, asn1cnst_range_t *r_value);
 static int emit_size_determination_code(arg_t *arg, asn1p_expr_type_e etype);
 static asn1p_expr_type_e _find_terminal_type(arg_t *arg);
-static int emit_range_comparison_code(arg_t *arg, asn1cnst_range_t *range, const char *varname, asn1c_integer_t natural_start, asn1c_integer_t natural_stop);
+static abuf *emit_range_comparison_code(asn1cnst_range_t *range,
+                                          const char *varname,
+                                          asn1c_integer_t natural_start,
+                                          asn1c_integer_t natural_stop);
 static int native_long_sign(arg_t *arg, asn1cnst_range_t *r);	/* -1, 0, 1 */
 
 static int
@@ -32,10 +35,10 @@
 	asn1p_expr_t *expr = arg->expr;
 	asn1p_expr_type_e etype;
 	asn1p_constraint_t *ct;
-	int got_something = 0;
 	int alphabet_table_compiled;
 	int produce_st = 0;
 	int ulong_optimize = 0;
+	int value_unsigned = 0;
 	int ret = 0;
 
 	ct = expr->combined_constraints;
@@ -109,6 +112,7 @@
 				if(native_long_sign(arg, r_value) >= 0) {
 					ulong_optimize = ulong_optimization(arg, etype, r_size, r_value);
 					if(!ulong_optimize) {
+						value_unsigned = 1;
 						OUT("unsigned long value;\n");
 					}
 				} else {
@@ -167,32 +171,42 @@
 	/*
 	 * Here is an if() {} else {} consrtaint checking code.
 	 */
+	int got_something = 0;
+    int value_unused = 0;
 	OUT("\n");
 	OUT("if(");
 	INDENT(+1);
 		if(r_size) {
-			if(got_something++) { OUT("\n"); OUT(" && "); }
-			OUT("(");
-			emit_range_comparison_code(arg, r_size, "size", 0, -1);
-			OUT(")");
+            abuf *ab = emit_range_comparison_code(r_size, "size", 0, -1);
+            if(ab->length)  {
+                OUT("(%s)", ab->buffer);
+                got_something++;
+            }
+            abuf_free(ab);
 		}
 		if(r_value) {
-			if(got_something++) { OUT("\n"); OUT(" && "); }
-			OUT("(");
-			if(etype == ASN_BASIC_BOOLEAN)
-				emit_range_comparison_code(arg, r_value,
-					"value", 0, 1);
-			else
-				emit_range_comparison_code(arg, r_value,
-					"value", -1, -1);
-			OUT(")");
+			if(got_something) { OUT("\n"); OUT(" && "); }
+            abuf *ab;
+            if(etype == ASN_BASIC_BOOLEAN)
+                ab = emit_range_comparison_code(r_value, "value", 0, 1);
+            else
+                ab = emit_range_comparison_code(r_value, "value",
+                                                value_unsigned ? 0 : -1, -1);
+            if(ab->length)  {
+                OUT("(%s)", ab->buffer);
+                got_something++;
+            } else {
+                value_unused = 1;
+            }
+            abuf_free(ab);
 		}
 		if(alphabet_table_compiled) {
-			if(got_something++) { OUT("\n"); OUT(" && "); }
+			if(got_something) { OUT("\n"); OUT(" && "); }
 			OUT("!check_permitted_alphabet_%d(%s)",
 				arg->expr->_type_unique_index,
 				produce_st ? "st" : "sptr");
-		}
+            got_something++;
+        }
 		if(!got_something) {
 			OUT("1 /* No applicable constraints whatsoever */");
 			OUT(") {\n");
@@ -200,6 +214,9 @@
 			if(produce_st) {
 				INDENTED(OUT("(void)st; /* Unused variable */\n"));
 			}
+			if(value_unused) {
+				INDENTED(OUT("(void)value; /* Unused variable */\n"));
+			}
 			INDENTED(OUT("/* Nothing is here. See below */\n"));
 			OUT("}\n");
 			OUT("\n");
@@ -491,16 +508,11 @@
 	}
 
 	if(range) {
-		OUT("if(!(");
-        int produced_something =
-            emit_range_comparison_code(arg, range, "cv", 0, natural_stop);
-        if(produced_something) {
-            OUT(")) return -1;\n");
+        abuf *ab = emit_range_comparison_code(range, "cv", 0, natural_stop);
+        if(ab->length) {
+            OUT("if(!(%s)) return -1;\n", ab->buffer);
         } else {
-            OUT(")) {\n");
-            OUT("\t(void)cv; /* Unused variable */\n");
-            OUT("\treturn -1;\n");
-            OUT("}\n");
+            OUT("(void)cv; /* Unused variable */\n");
         }
 	} else {
 		OUT("if(!table[cv]) return -1;\n");
@@ -512,58 +524,68 @@
 	return 0;
 }
 
-static int
-emit_range_comparison_code(arg_t *arg, asn1cnst_range_t *range, const char *varname, asn1c_integer_t natural_start, asn1c_integer_t natural_stop) {
-	int ignore_left;
-	int ignore_right;
-	int generated_something = 0;
-	int i;
+static void
+abuf_oint(abuf *ab, asn1c_integer_t v) {
+    if(v == (-2147483647L - 1)) {
+        abuf_printf(ab, "(-2147483647L - 1)");
+    } else {
+        abuf_printf(ab, "%s", asn1p_itoa(v));
+    }
+}
 
-	for(i = -1; i < range->el_count; i++) {
-		asn1cnst_range_t *r;
-		if(i == -1) {
-			if(range->el_count) continue;
-			r = range;
-		} else {
-			if(i) OUT(" || ");
-			r = range->elements[i];
-		}
+static abuf *
+emit_range_comparison_code(asn1cnst_range_t *range, const char *varname,
+                           asn1c_integer_t natural_start,
+                           asn1c_integer_t natural_stop) {
+    abuf *ab = abuf_new();
 
-		if(r != range) OUT("(");
+    if(range->el_count == 0) {
+        int ignore_left =
+            (range->left.type == ARE_MIN)
+            || (natural_start != -1 && range->left.value <= natural_start);
+        int ignore_right =
+            (range->right.type == ARE_MAX)
+            || (natural_stop != -1 && range->right.value >= natural_stop);
 
-		ignore_left = (r->left.type == ARE_MIN)
-				|| (natural_start != -1
-					&& r->left.value <= natural_start);
-		ignore_right = (r->right.type == ARE_MAX)
-				|| (natural_stop != -1
-					&& r->right.value >= natural_stop);
-		if(ignore_left && ignore_right) {
-			OUT("1 /* Constraint matches natural range of %s */",
-				varname);
-			continue;
-		}
+        if(ignore_left && ignore_right) {
+            /* Empty constraint comparison */
+        } else if(ignore_left) {
+            abuf_printf(ab, "%s <= ", varname);
+            abuf_oint(ab, range->right.value);
+        } else if(ignore_right) {
+            abuf_printf(ab, "%s >= ", varname);
+            abuf_oint(ab, range->left.value);
+        } else if(range->left.value == range->right.value) {
+            abuf_printf(ab, "%s == ", varname);
+            abuf_oint(ab, range->right.value);
+        } else {
+            abuf_printf(ab, "%s >= ", varname);
+            abuf_oint(ab, range->left.value);
+            abuf_printf(ab, " && ");
+            abuf_printf(ab, "%s <= ", varname);
+            abuf_oint(ab, range->right.value);
+        }
+    } else {
+        for(int i = 0; i < range->el_count; i++) {
+            asn1cnst_range_t *r = range->elements[i];
 
-		if(ignore_left) {
-			OUT("%s <= ", varname);
-			OINT(r->right.value);
-		} else if(ignore_right) {
-			OUT("%s >= ", varname);
-			OINT(r->left.value);
-		} else if(r->left.value == r->right.value) {
-			OUT("%s == ", varname);
-			OINT(r->right.value);
-		} else {
-			OUT("%s >= ", varname);
-			OINT(r->left.value);
-			OUT(" && ");
-			OUT("%s <= ", varname);
-			OINT(r->right.value);
-		}
-		if(r != range) OUT(")");
-		generated_something = 1;
-	}
+            abuf *rec = emit_range_comparison_code(r, varname, natural_start,
+                                                   natural_stop);
+            if(rec->length) {
+                if(ab->length) {
+                    abuf_str(ab, " || ");
+                }
+                abuf_str(ab, "(");
+                abuf_buf(ab, rec);
+                abuf_str(ab, ")");
+            } else {
+                /* Ignore this part */
+            }
+            abuf_free(rec);
+        }
+    }
 
-	return generated_something;
+    return ab;
 }
 
 static int
diff --git a/skeletons/NativeReal.c b/skeletons/NativeReal.c
index 6f540f1..448e1b1 100644
--- a/skeletons/NativeReal.c
+++ b/skeletons/NativeReal.c
@@ -83,8 +83,6 @@
                                      const void *ptr);
 static ssize_t NativeReal__set(const asn_TYPE_descriptor_t *td, void **sptr,
                                double d);
-static void NativeReal__network_swap(size_t float_size, const void *srcp,
-                                     uint8_t *dst);
 
 /*
  * Decode REAL type.
@@ -269,6 +267,62 @@
 #ifndef ASN_DISABLE_OER_SUPPORT
 
 /*
+ * Swap bytes from/to network, if local is little-endian.
+ * Unused endianness sections are likely removed at compile phase.
+ */
+static void
+NativeReal__network_swap(size_t float_size, const void *srcp, uint8_t *dst) {
+    const uint8_t *src = srcp;
+    double test = -0.0;
+    int float_big_endian = *(const char *)&test != 0;
+    /* In lieu of static_assert(sizeof(double) == 8) */
+    static const char sizeof_double_is_8_a[sizeof(double)-7] CC_NOTUSED;
+    static const char sizeof_double_is_8_b[9-sizeof(double)] CC_NOTUSED;
+    /* In lieu of static_assert(sizeof(sizeof) == 4) */
+    static const char sizeof_float_is_4_a[sizeof(float)-3] CC_NOTUSED;
+    static const char sizeof_float_is_4_b[5-sizeof(float)] CC_NOTUSED;
+
+    switch(float_size) {
+    case sizeof(double):
+        assert(sizeof(double) == 8);
+        if(float_big_endian) {
+            dst[0] = src[0];
+            dst[1] = src[1];
+            dst[2] = src[2];
+            dst[3] = src[3];
+            dst[4] = src[4];
+            dst[5] = src[5];
+            dst[6] = src[6];
+            dst[7] = src[7];
+        } else {
+            dst[0] = src[7];
+            dst[1] = src[6];
+            dst[2] = src[5];
+            dst[3] = src[4];
+            dst[4] = src[3];
+            dst[5] = src[2];
+            dst[6] = src[1];
+            dst[7] = src[0];
+        }
+        return;
+    case sizeof(float):
+        assert(sizeof(float) == 4);
+        if(float_big_endian) {
+            dst[0] = src[0];
+            dst[1] = src[1];
+            dst[2] = src[2];
+            dst[3] = src[3];
+        } else {
+            dst[0] = src[3];
+            dst[1] = src[2];
+            dst[2] = src[1];
+            dst[3] = src[0];
+        }
+        return;
+    }
+}
+
+/*
  * Encode as Canonical OER.
  */
 asn_enc_rval_t
@@ -655,58 +709,3 @@
     return float_size;
 }
 
-/*
- * Swap bytes from/to network, if local is little-endian.
- * Unused endianness sections are likely removed at compile phase.
- */
-static void
-NativeReal__network_swap(size_t float_size, const void *srcp, uint8_t *dst) {
-    const uint8_t *src = srcp;
-    double test = -0.0;
-    int float_big_endian = *(const char *)&test != 0;
-    /* In lieu of static_assert(sizeof(double) == 8) */
-    static const char sizeof_double_is_8_a[sizeof(double)-7] CC_NOTUSED;
-    static const char sizeof_double_is_8_b[9-sizeof(double)] CC_NOTUSED;
-    /* In lieu of static_assert(sizeof(sizeof) == 4) */
-    static const char sizeof_float_is_4_a[sizeof(float)-3] CC_NOTUSED;
-    static const char sizeof_float_is_4_b[5-sizeof(float)] CC_NOTUSED;
-
-    switch(float_size) {
-    case sizeof(double):
-        assert(sizeof(double) == 8);
-        if(float_big_endian) {
-            dst[0] = src[0];
-            dst[1] = src[1];
-            dst[2] = src[2];
-            dst[3] = src[3];
-            dst[4] = src[4];
-            dst[5] = src[5];
-            dst[6] = src[6];
-            dst[7] = src[7];
-        } else {
-            dst[0] = src[7];
-            dst[1] = src[6];
-            dst[2] = src[5];
-            dst[3] = src[4];
-            dst[4] = src[3];
-            dst[5] = src[2];
-            dst[6] = src[1];
-            dst[7] = src[0];
-        }
-        return;
-    case sizeof(float):
-        assert(sizeof(float) == 4);
-        if(float_big_endian) {
-            dst[0] = src[0];
-            dst[1] = src[1];
-            dst[2] = src[2];
-            dst[3] = src[3];
-        } else {
-            dst[0] = src[3];
-            dst[1] = src[2];
-            dst[2] = src[1];
-            dst[3] = src[0];
-        }
-        return;
-    }
-}
diff --git a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
index ebf970c..8b04894 100644
--- a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
@@ -394,7 +394,7 @@
 				| (ch[1] << 16)
 				| (ch[2] << 8)
 				|  ch[3];
-		if(!(1 /* Constraint matches natural range of cv */)) return -1;
+		(void)cv; /* Unused variable */
 	}
 	return 0;
 }
diff --git a/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
index bf21904..0f75e76 100644
--- a/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
+++ b/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
@@ -61,7 +61,7 @@
 				| (ch[1] << 16)
 				| (ch[2] << 8)
 				|  ch[3];
-		if(!(1 /* Constraint matches natural range of cv */)) return -1;
+		(void)cv; /* Unused variable */
 	}
 	return 0;
 }
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
index e60729e..25035fd 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
@@ -86,15 +86,12 @@
 	
 	value = *(const long *)sptr;
 	
-	if((value >= 0)) {
-		/* Constraint check succeeded */
-		return 0;
-	} else {
-		ASN__CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
+	if(1 /* No applicable constraints whatsoever */) {
+		(void)value; /* Unused variable */
+		/* Nothing is here. See below */
 	}
+	
+	return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
diff --git a/tests/tests-c-compiler/check-src/check-135.-gen-OER.c b/tests/tests-c-compiler/check-src/check-135.-gen-OER.c
index 6673a49..9060a6b 100644
--- a/tests/tests-c-compiler/check-src/check-135.-gen-OER.c
+++ b/tests/tests-c-compiler/check-src/check-135.-gen-OER.c
@@ -27,9 +27,9 @@
         oer_decode(0, &asn_DEF_T, (void **)&decoded, tmpbuf, er.encoded);
 
     assert(dr.code == RC_OK);
-    if(dr.consumed != er.encoded) {
+    if((ssize_t)dr.consumed != er.encoded) {
         ASN_DEBUG("Consumed %zu, expected %zu", dr.consumed, er.encoded);
-        assert(dr.consumed == er.encoded);
+        assert((ssize_t)dr.consumed == er.encoded);
     }
 
     if(XEQ_SUCCESS != xer_equivalent(&asn_DEF_T, &source, decoded, stderr)) {
diff --git a/tests/tests-c-compiler/check-src/check-148.c b/tests/tests-c-compiler/check-src/check-148.c
index 94afdcd..c6ba07a 100644
--- a/tests/tests-c-compiler/check-src/check-148.c
+++ b/tests/tests-c-compiler/check-src/check-148.c
@@ -100,24 +100,20 @@
 static void
 compare_encoding(asn_enc_rval_t *erval, uint8_t *expected, size_t expected_size,
                  uint8_t *actual) {
-  int i;
 
   assert(erval->encoded != -1);
-  if(erval->encoded != expected_size) {
+  if((size_t)erval->encoded != expected_size) {
     printf("%d != %d\n", (int)erval->encoded, (int)expected_size);
+    assert((size_t)erval->encoded == expected_size);
   }
-  assert(erval->encoded == (ssize_t)expected_size);
-	for(i = 0; i < expected_size; i++) {
-		if(expected[i] != actual[i]) {
-			fprintf(stderr, "Recreated buffer content mismatch:\n");
-			fprintf(stderr, "Byte %d, %x != %x (%d != %d)\n",
-				i,
-				expected[i], actual[i],
-				expected[i], actual[i]
-			);
-		}
-		assert(expected[i] == actual[i]);
-	}
+  for(size_t i = 0; i < expected_size; i++) {
+      if(expected[i] != actual[i]) {
+          fprintf(stderr, "Recreated buffer content mismatch:\n");
+          fprintf(stderr, "Byte %zu, %x != %x (%d != %d)\n", i, expected[i],
+                  actual[i], expected[i], actual[i]);
+      }
+      assert(expected[i] == actual[i]);
+  }
 }
 
 static void
diff --git a/tests/tests-c-compiler/check-src/check-41.c b/tests/tests-c-compiler/check-src/check-41.c
index 483229e..39bbe3c 100644
--- a/tests/tests-c-compiler/check-src/check-41.c
+++ b/tests/tests-c-compiler/check-src/check-41.c
@@ -90,9 +90,8 @@
 }
 
 static void
-compare(T_t *tp, uint8_t *cmp_buf, int cmp_buf_size) {
+compare(T_t *tp, uint8_t *cmp_buf, size_t cmp_buf_size) {
 	asn_enc_rval_t erval;
-	int i;
 
 	buf_size = cmp_buf_size + 100;
     uint8_t scratch[buf_size];
@@ -104,14 +103,14 @@
 	 */
 	erval = der_encode(&asn_DEF_T, tp, buf_fill, 0);
 	assert(erval.encoded != -1);
-	if(erval.encoded != cmp_buf_size) {
+	if((size_t)erval.encoded != cmp_buf_size) {
 		printf("%zd != %zd\n", erval.encoded, cmp_buf_size);
-	}
-	assert(erval.encoded == cmp_buf_size);
-	for(i = 0; i < cmp_buf_size; i++) {
+        assert((size_t)erval.encoded == cmp_buf_size);
+    }
+	for(size_t i = 0; i < cmp_buf_size; i++) {
 		if(buf[i] != cmp_buf[i]) {
 			fprintf(stderr, "Recreated buffer content mismatch:\n");
-			fprintf(stderr, "Byte %d, %x != %x (%d != %d)\n",
+			fprintf(stderr, "Byte %zd, %x != %x (%d != %d)\n",
 				i,
 				buf[i], cmp_buf[i],
 				buf[i], cmp_buf[i]
diff --git a/tests/tests-c-compiler/check-src/check-42.c b/tests/tests-c-compiler/check-src/check-42.c
index 9ff2866..4f11f61 100644
--- a/tests/tests-c-compiler/check-src/check-42.c
+++ b/tests/tests-c-compiler/check-src/check-42.c
@@ -7,6 +7,18 @@
 
 #include <LogLine.h>
 
+#ifdef ENABLE_LIBFUZZER
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+	LogLine_t *lp = 0;
+	(void)ber_decode(0, &asn_DEF_LogLine, (void **)&lp, Data, Size);
+    ASN_STRUCT_FREE(asn_DEF_LogLine, lp);
+    return 0;
+}
+
+#else
+
 uint8_t buf0[] = {
 	48,	/* LogLine SEQUENCE */
 	24,	/* L */
@@ -126,17 +138,6 @@
 	return;
 }
 
-#ifdef ENABLE_LIBFUZZER
-
-int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
-	LogLine_t *lp = 0;
-	(void)ber_decode(0, &asn_DEF_LogLine, (void **)&lp, Data, Size);
-    ASN_STRUCT_FREE(asn_DEF_LogLine, lp);
-    return 0;
-}
-
-#else
-
 int
 main(int ac, char **av) {
 	LogLine_t t;
diff --git a/tests/tests-c-compiler/check-src/check-70.-fwide-types.c b/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
index 7891069..4391b19 100644
--- a/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
+++ b/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
@@ -25,6 +25,20 @@
 #define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
 #endif
 
+#ifdef ENABLE_LIBFUZZER
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+    PDU_t *st = 0;
+    asn_dec_rval_t rval;
+    rval = asn_decode(0, ATS_BASIC_XER, &asn_DEF_PDU, (void **)&st, Data, Size);
+    assert(rval.consumed <= Size);
+    ASN_STRUCT_FREE(asn_DEF_PDU, st);
+    return 0;
+}
+
+#else
+
 enum expectation {
 	EXP_OK,		/* Encoding/decoding must succeed */
 	EXP_CXER_EXACT,	/* Encoding/decoding using CXER must be exact */
@@ -278,19 +292,6 @@
 	return 1;
 }
 
-#ifdef ENABLE_LIBFUZZER
-
-int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
-    PDU_t *st = 0;
-    asn_dec_rval_t rval;
-    rval = asn_decode(0, ATS_BASIC_XER, &asn_DEF_PDU, (void **)&st, Data, Size);
-    assert(rval.consumed <= Size);
-    ASN_STRUCT_FREE(asn_DEF_PDU, st);
-    return 0;
-}
-
-#else
-
 int
 main() {
 	DIR *dir;
diff --git a/tests/tests-c-compiler/check-src/check-70.c b/tests/tests-c-compiler/check-src/check-70.c
index 821b3d6..cb5d520 100644
--- a/tests/tests-c-compiler/check-src/check-70.c
+++ b/tests/tests-c-compiler/check-src/check-70.c
@@ -25,6 +25,20 @@
 #define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
 #endif
 
+#ifdef ENABLE_LIBFUZZER
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+    PDU_t *st = 0;
+    asn_dec_rval_t rval;
+    rval = asn_decode(0, ATS_BASIC_XER, &asn_DEF_PDU, (void **)&st, Data, Size);
+    assert(rval.consumed <= Size);
+    ASN_STRUCT_FREE(asn_DEF_PDU, st);
+    return 0;
+}
+
+#else
+
 enum expectation {
 	EXP_OK,		/* Encoding/decoding must succeed */
 	EXP_BROKEN,	/* Decoding must fail */
@@ -257,19 +271,6 @@
 	return 1;
 }
 
-#ifdef ENABLE_LIBFUZZER
-
-int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
-    PDU_t *st = 0;
-    asn_dec_rval_t rval;
-    rval = asn_decode(0, ATS_BASIC_XER, &asn_DEF_PDU, (void **)&st, Data, Size);
-    assert(rval.consumed <= Size);
-    ASN_STRUCT_FREE(asn_DEF_PDU, st);
-    return 0;
-}
-
-#else
-
 int
 main() {
 	DIR *dir;
diff --git a/tests/tests-c-compiler/check-src/check64-136.-gen-OER.c b/tests/tests-c-compiler/check-src/check64-136.-gen-OER.c
index 6b17a7b..866fd71 100644
--- a/tests/tests-c-compiler/check-src/check64-136.-gen-OER.c
+++ b/tests/tests-c-compiler/check-src/check64-136.-gen-OER.c
@@ -30,9 +30,9 @@
         oer_decode(0, &asn_DEF_T, (void **)&decoded, tmpbuf, er.encoded);
 
     assert(dr.code == RC_OK);
-    if(dr.consumed != er.encoded) {
-        ASN_DEBUG("Consumed %zu, expected %zu", dr.consumed, er.encoded);
-        assert(dr.consumed == er.encoded);
+    if((ssize_t)dr.consumed != er.encoded) {
+        ASN_DEBUG("Consumed %zd, expected %zu", dr.consumed, er.encoded);
+        assert((ssize_t)dr.consumed == er.encoded);
     }
 
     if(XEQ_SUCCESS != xer_equivalent(&asn_DEF_T, &source, decoded, stderr)) {
diff --git a/tests/tests-skeletons/check-PER-support.c b/tests/tests-skeletons/check-PER-support.c
index 608430c..f2b2542 100644
--- a/tests/tests-skeletons/check-PER-support.c
+++ b/tests/tests-skeletons/check-PER-support.c
@@ -229,10 +229,11 @@
     OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MAX);
     OK_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN, LONG_MAX);
 
+#ifndef  EXPLICIT_32BIT
     if(sizeof(long) == 8) {
         OK_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MAX);
 
-        /* Too wide range, not fit uint32_t */
+        /* Too wide range, would not fit uint32_t */
         OK_REBASE_ROUNDTRIP(INT32_MIN, (long)INT32_MIN - 1,
                             (long)INT32_MAX + 1);
         OK_REBASE_ROUNDTRIP(INT32_MAX, (long)INT32_MIN - 1,
@@ -251,6 +252,7 @@
         NO_REBASE_ROUNDTRIP(LONG_MIN, INT32_MIN, INT32_MAX);
         NO_REBASE_ROUNDTRIP(LONG_MAX, INT32_MIN, INT32_MAX);
     }
+#endif
 
     OK_REBASE_ROUNDTRIP(-1, LONG_MIN + 1, LONG_MAX - 1);
     OK_REBASE_ROUNDTRIP(0, LONG_MIN + 1, LONG_MAX - 1);