For some versions of gcc (7.4.0, 8.3.0, and 8.3.0-7 as shipped with
Debian-11, but not gcc-7.4.0-1ubuntu1~18.04.1), the previous patch
introduced the following warning:
tfortune.c:912:3: warning: 'lh_stats' may be used uninitialized in this function [-Wmaybe-uninitialized]
free(lh_stats);
^~~~~~~~~~~~~~
We only assign to lh_stats when --verbose is given, and only free the
memory if --verbose is given. Apparently gcc has started to believe
that the value of the "verbose" boolean variable might change, which is
impossible. Therefore, the warning is believed to be a false positive.
However, gcc has a point: There is no need to check for --verbose
twice, as a single branch is sufficient. This not only gets rid of
the warning but also makes the boolean variable pointless and removes
more lines than it adds.
struct linhash_item *itemp;
unsigned num_epi_files, num_epis, num_unique_tags, num_x = 0;
long unsigned num_tags = 0;
struct linhash_item *itemp;
unsigned num_epi_files, num_epis, num_unique_tags, num_x = 0;
long unsigned num_tags = 0;
struct regfile_iter *riter;
struct regfile_iter *riter;
- bool verbose = OPT_GIVEN(STATS, VERBOSE);
tagtab = hash_tags(&num_epi_files, &num_epis);
for (
tagtab = hash_tags(&num_epi_files, &num_epis);
for (
num_tags += (long unsigned)itemp->object;
num_unique_tags = linhash_num_items(tagtab);
linhash_iterator_free(liter);
num_tags += (long unsigned)itemp->object;
num_unique_tags = linhash_num_items(tagtab);
linhash_iterator_free(liter);
- if (verbose)
- lh_stats = linhash_statistics(tagtab);
- linhash_free(tagtab);
-
xdir = get_xdir();
for (
regfile_iter_new(xdir, &riter);
xdir = get_xdir();
for (
regfile_iter_new(xdir, &riter);
(float)num_tags / num_epis : 0);
printf("average number of tag recurrence... %8.02f\n", num_unique_tags > 0?
(float)num_tags / num_unique_tags : 0);
(float)num_tags / num_epis : 0);
printf("average number of tag recurrence... %8.02f\n", num_unique_tags > 0?
(float)num_tags / num_unique_tags : 0);
+ if (OPT_GIVEN(STATS, VERBOSE)) {
+ char *lh_stats = linhash_statistics(tagtab);
printf("\nlinear hashing statistics:\n%s\n", lh_stats);
free(lh_stats);
}
printf("\nlinear hashing statistics:\n%s\n", lh_stats);
free(lh_stats);
}
return 1;
}
EXPORT_CMD_HANDLER(stats);
return 1;
}
EXPORT_CMD_HANDLER(stats);