VMS: Disable the warning MAYLOSEDATA3
authorRichard Levitte <levitte@openssl.org>
Tue, 29 Mar 2016 18:18:31 +0000 (20:18 +0200)
committerRichard Levitte <levitte@openssl.org>
Tue, 29 Mar 2016 18:27:22 +0000 (20:27 +0200)
The warning MAYLOSEDATA3 is one you will always get when compiling
source that calculates the difference between two pointers with
/POINTER_SIZE=64.

The reason is quite simple, ptrdiff_t is always a 32-bit integer
regardless of pointer size, so the result of 'ptr1 - ptr2' can
potentially be larger than a 32-bit integer.  The compiler simply
warns you of that possibility.

However, we only use pointer difference within objects and strings,
all of them well within 2^32 bytes in size, so that operation is
harmless with our source, and we can therefore safely turn off that
warning.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Configurations/10-main.conf

index 4e9579cadac3e74cf4e6d49827321eb7c3eb4863..45a685fba2471cebb9f575086bea00ec77428f63 100644 (file)
@@ -74,6 +74,20 @@ sub vc_wince_info {
     return $vc_wince_info;
 }
 
+# Helper functions for the VMS configs
+my $vms_info = {};
+sub vms_info {
+    unless (%$vms_info) {
+       $vms_info->{disable_warns} = [ ];
+       $vms_info->{disable_warns_p32} = [ ];
+       $vms_info->{disable_warns_p64} = [ ];
+       `PIPE CC /NOCROSS_REFERENCE /NOLIST /NOOBJECT /WARNINGS = DISABLE = ( MAYLOSEDATA3, EMPTYFILE ) NL: 2> NL:`;
+       if ($? == 0) {
+           push @{$vms_info->{disable_warns_p64}}, "MAYLOSEDATA3";
+       }
+    }
+    return $vms_info;
+}
 
 %targets = (
 
@@ -1726,37 +1740,69 @@ sub vc_wince_info {
     #},
     "vms-alpha" => {
         inherit_from     => [ "vms-generic" ],
+        cflags           => sub { my @warnings =
+                                      @{vms_info()->{disable_warns}};
+                                  @warnings
+                                      ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); },
         #as               => "???",
         #debug_aflags     => "/NOOPTIMIZE/DEBUG",
         #release_aflags   => "/OPTIMIZE/NODEBUG",
         bn_opts          => "SIXTY_FOUR_BIT RC4_INT RC4_CHUNK_LL DES_PTR BF_PTR",
     },
     "vms-alpha-p32" => {
-       inherit_from     => [ "vms-alpha" ],
-       cflags           => add("/POINTER_SIZE=32"),
-       ex_libs          => sub { join(",", map { s|SHR([\./])|SHR32$1|g; $_ } @_) },
+        inherit_from     => [ "vms-alpha" ],
+        cflags           =>
+            add("/POINTER_SIZE=32",
+                sub { my @warnings =
+                          @{vms_info()->{disable_warns_p32}};
+                      @warnings
+                          ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : ();
+                } ),
+        ex_libs          => sub { join(",", map { s|SHR([\./])|SHR32$1|g; $_ } @_) },
     },
     "vms-alpha-p64" => {
-       inherit_from     => [ "vms-alpha" ],
-       cflags           => add("/POINTER_SIZE=64"),
-       ex_libs          => sub { join(",", map { s|SHR([\./])|SHR64$1|g; $_ } @_) },
+        inherit_from     => [ "vms-alpha" ],
+        cflags           =>
+            add("/POINTER_SIZE=64",
+                sub { my @warnings =
+                          @{vms_info()->{disable_warns_p64}};
+                      @warnings
+                          ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : ();
+                } ),
+        ex_libs          => sub { join(",", map { s|SHR([\./])|SHR64$1|g; $_ } @_) },
     },
     "vms-ia64" => {
         inherit_from     => [ "vms-generic" ],
+        cflags           => sub { my @warnings =
+                                      @{vms_info()->{disable_warns}};
+                                  @warnings
+                                      ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); },
         #as               => "I4S",
         #debug_aflags     => "/NOOPTIMIZE/DEBUG",
         #release_aflags   => "/OPTIMIZE/NODEBUG",
         bn_opts          => "SIXTY_FOUR_BIT RC4_INT RC4_CHUNK_LL DES_PTR BF_PTR",
     },
     "vms-ia64-p32" => {
-       inherit_from     => [ "vms-ia64" ],
-       cflags           => add("/POINTER_SIZE=32"),
-       ex_libs          => sub { join(",", map { s|SHR([\./])|SHR32$1|g; $_ } @_) },
+        inherit_from     => [ "vms-ia64" ],
+        cflags           =>
+            add("/POINTER_SIZE=32",
+                sub { my @warnings =
+                          @{vms_info()->{disable_warns_p32}};
+                      @warnings
+                          ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : ();
+                } ),
+        ex_libs          => sub { join(",", map { s|SHR([\./])|SHR32$1|g; $_ } @_) },
     },
     "vms-ia64-p64" => {
-       inherit_from     => [ "vms-ia64" ],
-       cflags           => add("/POINTER_SIZE=64"),
-       ex_libs          => sub { join(",", map { s|SHR([\./])|SHR64$1|g; $_ } @_) },
+        inherit_from     => [ "vms-ia64" ],
+        cflags           =>
+            add("/POINTER_SIZE=64",
+                sub { my @warnings =
+                          @{vms_info()->{disable_warns_p64}};
+                      @warnings
+                          ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : ();
+                } ),
+        ex_libs          => sub { join(",", map { s|SHR([\./])|SHR64$1|g; $_ } @_) },
     },
 
 );