From 1f651229f0be6227e64c20b8400cdba2ef8fa1d0 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 6 Apr 2006 22:33:21 +0200 Subject: [PATCH] re PR gcov-profile/20815 (-fprofile-use barfs with "coverage mismatch for function '...' while reading counter 'arcs'.") PR profile/20815 PR profile/26399 * coverage.c (coverage_checksum_string): Reorganize loop to not read after buffer. * g++.dg/bprob/g++-bprob-2.C: New testcase. From-SVN: r112738 --- gcc/ChangeLog | 7 ++++ gcc/coverage.c | 49 ++++++++++++------------ gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/bprob/g++-bprob-2.C | 15 ++++++++ 4 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 gcc/testsuite/g++.dg/bprob/g++-bprob-2.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6391dd42546..6ee11b544c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-04-06 Jan Hubicka + + PR profile/20815 + PR profile/26399 + * coverage.c (coverage_checksum_string): Reorganize loop to not read + after buffer. + 2006-04-06 Mike Stump * builtins.c (expand_builtin_longjmp):Use #ifdef instead of #if diff --git a/gcc/coverage.c b/gcc/coverage.c index 0ba0c110cbb..9d66e9e0589 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -457,30 +457,31 @@ coverage_checksum_string (unsigned chksum, const char *string) to be no better chance then walk all possible offsets looking for magicnuber. */ if (offset) - for (;string[offset]; offset++) - for (i = i + offset; string[i]; i++) - if (string[i]=='_') - { - int y; - - for (y = 1; y < 9; y++) - if (!(string[i + y] >= '0' && string[i + y] <= '9') - && !(string[i + y] >= 'A' && string[i + y] <= 'F')) - break; - if (y != 9 || string[i + 9] != '_') - continue; - for (y = 10; y < 18; y++) - if (!(string[i + y] >= '0' && string[i + y] <= '9') - && !(string[i + y] >= 'A' && string[i + y] <= 'F')) - break; - if (y != 18) - continue; - if (!dup) - string = dup = xstrdup (string); - for (y = 10; y < 18; y++) - dup[i + y] = '0'; - } - break; + { + for (i = i + offset; string[i]; i++) + if (string[i]=='_') + { + int y; + + for (y = 1; y < 9; y++) + if (!(string[i + y] >= '0' && string[i + y] <= '9') + && !(string[i + y] >= 'A' && string[i + y] <= 'F')) + break; + if (y != 9 || string[i + 9] != '_') + continue; + for (y = 10; y < 18; y++) + if (!(string[i + y] >= '0' && string[i + y] <= '9') + && !(string[i + y] >= 'A' && string[i + y] <= 'F')) + break; + if (y != 18) + continue; + if (!dup) + string = dup = xstrdup (string); + for (y = 10; y < 18; y++) + dup[i + y] = '0'; + } + break; + } } chksum = crc32_string (chksum, string); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 814f9576627..41398327f3d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-04-06 Jan Hubicka + + PR profile/26399 + * g++.dg/bprob/g++-bprob-2.C: New testcase. + 2006-04-06 Roger Sayle * g++.dg/conversion/nullptr1.C: New test case. diff --git a/gcc/testsuite/g++.dg/bprob/g++-bprob-2.C b/gcc/testsuite/g++.dg/bprob/g++-bprob-2.C new file mode 100644 index 00000000000..23577d47e0a --- /dev/null +++ b/gcc/testsuite/g++.dg/bprob/g++-bprob-2.C @@ -0,0 +1,15 @@ +namespace { + +int calc(int j) +{ + if (j==0) return 0; + return calc(j-1)*j % 17; +} + +} + +int main(void) +{ + return calc(25); +} + -- 2.30.2