[PROPOSED 1/2] Rename ‘lint’ to ‘GCC_LINT’
* Makefile (GCC_DEBUG_FLAGS): * private.h (INITIALIZE): Rename ‘lint’ to ‘GCC_LINT’, as the macro is intended for GCC, not for traditional ‘lint’. --- Makefile | 2 +- private.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index e7c6ac0..bcfdcb2 100644 --- a/Makefile +++ b/Makefile @@ -159,7 +159,7 @@ LDLIBS= # (or some other number) to set the maximum time zone abbreviation length # that zic will accept without a warning (the default is 6) # $(GCC_DEBUG_FLAGS) if you are using recent GCC and want lots of checking -GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \ +GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common -fstrict-aliasing \ -Wall -Wextra \ -Wbad-function-cast -Wcast-align -Wdate-time \ -Wdeclaration-after-statement \ diff --git a/private.h b/private.h index e9eb211..6886185 100644 --- a/private.h +++ b/private.h @@ -566,7 +566,7 @@ static time_t const time_t_max = MAXVAL(time_t, TYPE_BIT(time_t)); ** INITIALIZE(x) */ -#ifdef lint +#ifdef GCC_LINT # define INITIALIZE(x) ((x) = 0) #else # define INITIALIZE(x) -- 2.9.4
* Makefile (GCC_INSTRUMENT): New option. (GCC_DEBUG_FLAGS): Update for GCC 7. * date.c (usage): Now _Noreturn. * difftime.c (difftime): Omit const attribute, as this is now in the declaration. * localtime.c (transtime): Omit ATTRIBUTE_PURE, as GCC is now smart enough to deduce it. (time2posix_z, posix2time_z): Omit ATTRIBUTE_PURE, as it is problematic whether these functions are actually pure. * localtime.c (leaps_thru_end_of_nonneg): * zdump.c (delta_nonneg): New function, with the nonnegative part of the old. * localtime.c (leaps_thru_end_of): * zdump.c (delta): Use new function to avoid recursion; this pacifies GCC 7 without needing an attribute. * private.h (difftime): Declare with ATTRIBUTE_CONST. --- Makefile | 35 +++++++++++++++++++++-------------- date.c | 2 +- difftime.c | 2 +- localtime.c | 19 +++++++++++++------ private.h | 2 +- zdump.c | 14 ++++++++++---- 6 files changed, 47 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index bcfdcb2..c62d46f 100644 --- a/Makefile +++ b/Makefile @@ -159,20 +159,27 @@ LDLIBS= # (or some other number) to set the maximum time zone abbreviation length # that zic will accept without a warning (the default is 6) # $(GCC_DEBUG_FLAGS) if you are using recent GCC and want lots of checking -GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common -fstrict-aliasing \ - -Wall -Wextra \ - -Wbad-function-cast -Wcast-align -Wdate-time \ - -Wdeclaration-after-statement \ - -Wdouble-promotion \ - -Wformat=2 -Winit-self -Wjump-misses-init \ - -Wlogical-op -Wmissing-prototypes -Wnested-externs \ - -Wold-style-definition -Woverlength-strings -Wpointer-arith \ - -Wshadow -Wstrict-prototypes -Wsuggest-attribute=const \ - -Wsuggest-attribute=format -Wsuggest-attribute=noreturn \ - -Wsuggest-attribute=pure -Wtrampolines \ - -Wundef -Wunused -Wwrite-strings \ - -Wno-address -Wno-format-nonliteral -Wno-sign-compare \ - -Wno-type-limits -Wno-unused-parameter +# Select instrumentation via "make GCC_INSTRUMENT='whatever'". +GCC_INSTRUMENT = \ + -fsanitize=undefined -fsanitize-address-use-after-scope \ + -fsanitize-undefined-trap-on-error -fstack-protector +GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \ + $(GCC_INSTRUMENT) \ + -Wall -Wextra \ + -Walloc-size-larger-than=100000 -Warray-bounds=2 \ + -Wbad-function-cast -Wcast-align -Wdate-time \ + -Wdeclaration-after-statement -Wdouble-promotion \ + -Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \ + -Winit-self -Wjump-misses-init -Wlogical-op \ + -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \ + -Wold-style-definition -Woverlength-strings -Wpointer-arith \ + -Wshadow -Wshift-overflow=2 -Wstrict-prototypes -Wstringop-overflow=5 \ + -Wsuggest-attribute=const -Wsuggest-attribute=format \ + -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \ + -Wtrampolines -Wundef -Wuninitialized -Wunused \ + -Wvariadic-macros -Wvla -Wwrite-strings \ + -Wno-address -Wno-format-nonliteral -Wno-sign-compare \ + -Wno-type-limits -Wno-unused-parameter # # If you want to use System V compatibility code, add # -DUSG_COMPAT diff --git a/date.c b/date.c index 98b907f..269825d 100644 --- a/date.c +++ b/date.c @@ -54,7 +54,7 @@ static void display(const char *, time_t); static void dogmt(void); static void errensure(void); static void timeout(FILE *, const char *, const struct tm *); -static void usage(void); +static _Noreturn void usage(void); int main(const int argc, char *argv[]) diff --git a/difftime.c b/difftime.c index ba2fd03..856234a 100644 --- a/difftime.c +++ b/difftime.c @@ -14,7 +14,7 @@ dminus(double x) return -x; } -double ATTRIBUTE_CONST +double difftime(time_t time1, time_t time0) { /* diff --git a/localtime.c b/localtime.c index 0ccd8ba..a951cab 100644 --- a/localtime.c +++ b/localtime.c @@ -919,7 +919,7 @@ getrule(const char *strp, register struct rule *const rulep) ** effect, calculate the year-relative time that rule takes effect. */ -static int_fast32_t ATTRIBUTE_PURE +static int_fast32_t transtime(const int year, register const struct rule *const rulep, const int_fast32_t offset) { @@ -1588,11 +1588,18 @@ offtime(const time_t *timep, long offset) ** where, to make the math easy, the answer for year zero is defined as zero. */ -static int ATTRIBUTE_PURE +static int +leaps_thru_end_of_nonneg(int y) +{ + return y / 4 - y / 100 + y / 400; +} + +static int leaps_thru_end_of(register const int y) { - return (y >= 0) ? (y / 4 - y / 100 + y / 400) : - -(leaps_thru_end_of(-(y + 1)) + 1); + return (y < 0 + ? -1 - leaps_thru_end_of_nonneg(-1 - y) + : leaps_thru_end_of_nonneg(y)); } static struct tm * @@ -2210,7 +2217,7 @@ leapcorr(struct state const *sp, time_t t) return 0; } -NETBSD_INSPIRED_EXTERN time_t ATTRIBUTE_PURE +NETBSD_INSPIRED_EXTERN time_t time2posix_z(struct state *sp, time_t t) { return t - leapcorr(sp, t); @@ -2232,7 +2239,7 @@ time2posix(time_t t) return t; } -NETBSD_INSPIRED_EXTERN time_t ATTRIBUTE_PURE +NETBSD_INSPIRED_EXTERN time_t posix2time_z(struct state *sp, time_t t) { time_t x; diff --git a/private.h b/private.h index 6886185..1e61592 100644 --- a/private.h +++ b/private.h @@ -396,7 +396,7 @@ typedef time_tz tz_time_t; char *ctime(time_t const *); char *ctime_r(time_t const *, char *); -double difftime(time_t, time_t); +double difftime(time_t, time_t) ATTRIBUTE_CONST; struct tm *gmtime(time_t const *); struct tm *gmtime_r(time_t const *restrict, struct tm *restrict); struct tm *localtime(time_t const *); diff --git a/zdump.c b/zdump.c index c19b3b4..7cde3d3 100644 --- a/zdump.c +++ b/zdump.c @@ -683,17 +683,15 @@ hunt(timezone_t tz, char *name, time_t lot, time_t hit) } /* -** Thanks to Paul Eggert for logic used in delta. +** Thanks to Paul Eggert for logic used in delta_nonneg. */ static intmax_t -delta(struct tm * newp, struct tm *oldp) +delta_nonneg(struct tm *newp, struct tm *oldp) { register intmax_t result; register int tmy; - if (newp->tm_year < oldp->tm_year) - return -delta(oldp, newp); result = 0; for (tmy = oldp->tm_year; tmy < newp->tm_year; ++tmy) result += DAYSPERNYEAR + isleap_sum(tmy, TM_YEAR_BASE); @@ -707,6 +705,14 @@ delta(struct tm * newp, struct tm *oldp) return result; } +static intmax_t +delta(struct tm *newp, struct tm *oldp) +{ + return (newp->tm_year < oldp->tm_year + ? -delta_nonneg(oldp, newp) + : delta_nonneg(newp, oldp)); +} + #ifndef TM_GMTOFF /* Return A->tm_yday, adjusted to compare it fairly to B->tm_yday. Assume A and B differ by at most one year. */ -- 2.9.4
participants (1)
-
Paul Eggert