Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH] time64.c tweaks, take 2 #15723

Closed
p5pRT opened this issue Nov 18, 2016 · 8 comments
Closed

[PATCH] time64.c tweaks, take 2 #15723

p5pRT opened this issue Nov 18, 2016 · 8 comments

Comments

@p5pRT
Copy link

p5pRT commented Nov 18, 2016

Migrated from rt.perl.org#130128 (status was 'resolved')

Searchable as RT130128$

@p5pRT
Copy link
Author

p5pRT commented Nov 18, 2016

From @petdance

Created by @petdance

A few small tweaks in time64.c

* The struct TM * pointers to S_check_tm and S_timegm64 functions is
not modified, so make it be a const and let the compiler know it won't
get modified.

* Localize variables to their innermost scopes

* Consting various local variables

Perl Info

Flags:
    category=core
    severity=low
    Type=Patch
    PatchStatus=HasPatch

Site configuration information for perl 5.24.0:

Configured by andy at Sun Jun  5 23:28:46 CDT 2016.

Summary of my perl5 (revision 5 version 24 subversion 0) configuration:
   
  Platform:
    osname=linux, osvers=3.10.0-327.18.2.el7.x86_64, archname=x86_64-linux
    uname='linux clifford 3.10.0-327.18.2.el7.x86_64 #1 smp thu may 12 11:03:55 utc 2016 x86_64 x86_64 x86_64 gnulinux '
    config_args='-de -Dprefix=/home/andy/perl5/perlbrew/perls/perl-5.24.0 -Aeval:scriptdir=/home/andy/perl5/perlbrew/perls/perl-5.24.0/bin'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2',
    optimize='-O2',
    cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion='', gccversion='4.8.5 20150623 (Red Hat 4.8.5-4)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib /lib64 /usr/lib64 /usr/local/lib64
    libs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=libc-2.17.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.17'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'

Locally applied patches:
    Devel::PatchPerl 1.38


@INC for perl 5.24.0:
    /home/andy/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/x86_64-linux
    /home/andy/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0
    /home/andy/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0/x86_64-linux
    /home/andy/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0
    .


Environment for perl 5.24.0:
    HOME=/home/andy
    LANG=en_US.UTF-8
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/andy/perl5/perlbrew/bin:/home/andy/perl5/perlbrew/perls/perl-5.24.0/bin:/home/andy/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
    PERLBREW_BASHRC_VERSION=0.75
    PERLBREW_HOME=/home/andy/.perlbrew
    PERLBREW_MANPATH=/home/andy/perl5/perlbrew/perls/perl-5.24.0/man
    PERLBREW_PATH=/home/andy/perl5/perlbrew/bin:/home/andy/perl5/perlbrew/perls/perl-5.24.0/bin
    PERLBREW_PERL=perl-5.24.0
    PERLBREW_ROOT=/home/andy/perl5/perlbrew
    PERLBREW_VERSION=0.75
    PERLCRITIC=/home/andy/tw/Dev/perlcriticrc
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Nov 18, 2016

From @petdance

time64.diff
diff --git a/time64.c b/time64.c
index ca7f786..9572180 100644
--- a/time64.c
+++ b/time64.c
@@ -117,27 +117,26 @@ static const short safe_years[SOLAR_CYCLE_LENGTH] = {
 
 static int S_is_exception_century(Year year)
 {
-    int is_exception = ((year % 100 == 0) && !(year % 400 == 0));
+    const int is_exception = ((year % 100 == 0) && !(year % 400 == 0));
     TIME64_TRACE1("# is_exception_century: %s\n", is_exception ? "yes" : "no");
 
     return(is_exception);
 }
 
 
-static Time64_T S_timegm64(struct TM *date) {
+static Time64_T S_timegm64(const struct TM *date) {
     int      days    = 0;
     Time64_T seconds = 0;
-    Year     year;
 
     if( date->tm_year > 70 ) {
-        year = 70;
+        Year year = 70;
         while( year < date->tm_year ) {
             days += length_of_year[IS_LEAP(year)];
             year++;
         }
     }
     else if ( date->tm_year < 70 ) {
-        year = 69;
+        Year year = 69;
         do {
             days -= length_of_year[IS_LEAP(year)];
             year--;
@@ -160,7 +159,7 @@ static Time64_T S_timegm64(struct TM *date) {
 
 
 #ifdef DEBUGGING
-static int S_check_tm(struct TM *tm)
+static int S_check_tm(const struct TM *tm)
 {
     /* Don't forget leap seconds */
     assert(tm->tm_sec >= 0);
@@ -297,7 +296,7 @@ static struct tm * S_localtime_r(const time_t *clock, struct tm *result) {
 #ifdef __VMS
     dTHX;    /* the following is defined as Perl_my_localtime(aTHX_ ...) */
 #endif
-    const struct tm *static_result = localtime(clock);
+    const struct tm * const static_result = localtime(clock);
 
     assert(result != NULL);
 
@@ -318,7 +317,7 @@ static struct tm * S_gmtime_r(const time_t *clock, struct tm *result) {
 #ifdef __VMS
     dTHX;    /* the following is defined as Perl_my_localtime(aTHX_ ...) */
 #endif
-    const struct tm *static_result = gmtime(clock);
+    const struct tm * const static_result = gmtime(clock);
 
     assert(result != NULL);
 
@@ -341,7 +340,6 @@ struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
     Time64_T m;
     Time64_T time = *in_time;
     Year year = 70;
-    int cycles = 0;
 
     assert(p != NULL);
 
@@ -390,7 +388,7 @@ struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
 
     if (m >= 0) {
         /* Gregorian cycles, this is huge optimization for distant times */
-        cycles = (int)Perl_floor(m / (Time64_T) days_in_gregorian_cycle);
+        const int cycles = (int)Perl_floor(m / (Time64_T) days_in_gregorian_cycle);
         if( cycles ) {
             m -= (cycles * (Time64_T) days_in_gregorian_cycle);
             year += (cycles * years_in_gregorian_cycle);
@@ -411,6 +409,8 @@ struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
             v_tm_mon++;
         }
     } else {
+        int cycles;
+
         year--;
 
         /* Gregorian cycles */

@p5pRT
Copy link
Author

p5pRT commented Nov 29, 2016

From @tonycoz

On Thu, 17 Nov 2016 19​:54​:45 -0800, petdance wrote​:

A few small tweaks in time64.c

* The struct TM * pointers to S_check_tm and S_timegm64 functions is
not modified, so make it be a const and let the compiler know it won't
get modified.

* Localize variables to their innermost scopes

* Consting various local variables

Thanks, applied as c75442a.

It would simplify things for me if you supplied the patches
as git format-patch patches, if nothing else to get the commit message as you might prefer it.

Tony

@p5pRT
Copy link
Author

p5pRT commented Nov 29, 2016

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Nov 29, 2016

@tonycoz - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

p5pRT commented Nov 29, 2016

From @petdance

It would simplify things for me if you supplied the patches
as git format-patch patches, if nothing else to get the commit message as you might prefer it.

Sorry. Will do.

--
Andy Lester => www.petdance.com

@p5pRT
Copy link
Author

p5pRT commented May 30, 2017

From @khwilliamson

Thank you for filing this report. You have helped make Perl better.

With the release today of Perl 5.26.0, this and 210 other issues have been
resolved.

Perl 5.26.0 may be downloaded via​:
https://metacpan.org/release/XSAWYERX/perl-5.26.0

If you find that the problem persists, feel free to reopen this ticket.

@p5pRT
Copy link
Author

p5pRT commented May 30, 2017

@khwilliamson - Status changed from 'pending release' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant