ext/POSIX/t/posix.t: Fix undefined C behavior in test
authorsisyphus <sisyphus@cpan.org>
Sun, 28 Apr 2019 23:32:30 +0000 (17:32 -0600)
committerKarl Williamson <khw@cpan.org>
Mon, 29 Apr 2019 03:13:32 +0000 (21:13 -0600)
Behavior marked as undefined by the C standard should be avoided.  Its
a simple matter to fix this .t to not have such behavior.

In general, the programmer may not have control over the input string
being parsed to convert to a number, and so it could be too large or
tiny for the available precision and hence result in undefined behavior.
That is something that is unavoidable.

ext/POSIX/t/posix.t

index 1fc36e2..25099ea 100644 (file)
@@ -206,11 +206,12 @@ SKIP: {
     # If this check fails then perl's buggy atof has probably assigned the value,
     # instead of the preferred Perl_strtod function.
 
-    $n = &POSIX::strtold('9.81256119e4820');
     if($Config{nvtype} eq 'long double') {
+      $n = &POSIX::strtold('9.81256119e4820');
       cmp_ok($n, '==', 9.81256119e4820, "strtold and perl agree $weasel_words");
     }
     elsif($Config{nvtype} eq '__float128') {
+      $n = &POSIX::strtold('9.81256119e4820');
       if($Config{longdblkind} == 1 || $Config{longdblkind} == 2) {
         cmp_ok($n, '==', 9.81256119e4820, "strtold and perl agree $weasel_words");
       }