regen/regcharclass.pl: Don't test UV >= 0
authorKarl Williamson <public@khwilliamson.com>
Sat, 25 Jan 2014 23:53:24 +0000 (16:53 -0700)
committerKarl Williamson <public@khwilliamson.com>
Mon, 27 Jan 2014 18:07:17 +0000 (11:07 -0700)
An unsigned must always be >= 0, and generating a test for that can lead
to a compiler warning, even if it gets optimized out.  The input to the
macros generated by this are supposed to be UV.  This commit suppresses
any >= 0 test.

regen/regcharclass.pl

index 58a2ca6..d6e0010 100755 (executable)
@@ -1090,10 +1090,18 @@ sub _combine {
     return if !@cond;
     my $item= shift @cond;
     my ( $cstr, $gtv );
-    if ( ref $item ) {
-        $cstr=
+    if ( ref $item ) {  # @item should be a 2-element array giving range start
+                        # and end
+        if ($item->[0] == 0) {  # UV's are never negative, so skip "0 <= "
+                                # test which could generate a compiler warning
+                                # that test is always true
+            $cstr= sprintf( "$test <= $self->{val_fmt}", $item->[1] );
+        }
+        else {
+            $cstr=
           sprintf( "( $self->{val_fmt} <= $test && $test <= $self->{val_fmt} )",
-            @$item );
+                   @$item );
+        }
         $gtv= sprintf "$self->{val_fmt}", $item->[1];
     } else {
         $cstr= sprintf( "$self->{val_fmt} == $test", $item );