aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/coverage.c49
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/bprob/g++-bprob-2.C15
4 files changed, 52 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6391dd4..6ee11b5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-04-06 Jan Hubicka <jh@suse.cz>
+
+ PR profile/20815
+ PR profile/26399
+ * coverage.c (coverage_checksum_string): Reorganize loop to not read
+ after buffer.
+
2006-04-06 Mike Stump <mrs@apple.com>
* builtins.c (expand_builtin_longjmp):Use #ifdef instead of #if
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 0ba0c11..9d66e9e 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 814f957..4139832 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-04-06 Jan Hubicka <jh@suse.cz>
+
+ PR profile/26399
+ * g++.dg/bprob/g++-bprob-2.C: New testcase.
+
2006-04-06 Roger Sayle <roger@eyesopen.com>
* 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 0000000..23577d4
--- /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);
+}
+