patches/gcc/4.0.0/120-pr20815-fix.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
yann@402
     1
Date: 18 May 2005 22:47:59 -0000
yann@402
     2
Message-ID: <20050518224759.7352.qmail@sourceware.org>
yann@402
     3
From: "hubicka at ucw dot cz" <gcc-bugzilla@gcc.gnu.org>
yann@402
     4
To: dank@kegel.com
yann@402
     5
References: <20050407215701.20815.dank@kegel.com>
yann@402
     6
Reply-To: gcc-bugzilla@gcc.gnu.org
yann@402
     7
Subject: [Bug gcov/profile/20815] -fprofile-use barfs with "coverage mismatch for function '...' while reading counter 'arcs'."
yann@402
     8
yann@402
     9
yann@402
    10
------- Additional Comments From hubicka at ucw dot cz  2005-05-18 22:47 -------
yann@402
    11
Subject: Re: [Bug gcov/profile/20815] -fprofile-use barfs with "coverage mismatch for function '...' while reading counter 'arcs'."
yann@402
    12
yann@402
    13
> 
yann@402
    14
> ------- Additional Comments From hubicka at ucw dot cz  2005-05-18 22:22 -------
yann@402
    15
> Subject: Re: [Bug gcov/profile/20815] -fprofile-use barfs with "coverage mismatch for function '...' while reading counter 'arcs'."
yann@402
    16
> 
yann@402
    17
> coverage_checksum_string already knows a bit about ignoring random seed
yann@402
    18
> produced mess.  It looks like this needs to be extended somehow to
yann@402
    19
> handle namespaces too...
yann@402
    20
yann@402
    21
This seems to solve the missmatch.  Would it be possible to test it on
yann@402
    22
bigger testcase and if it works distile a testcase that don't use
yann@402
    23
file IO so it is more suitable for gcc regtesting?
yann@402
    24
yann@402
    25
Index: coverage.c
yann@402
    26
===================================================================
yann@402
    27
RCS file: /cvs/gcc/gcc/gcc/coverage.c,v
yann@402
    28
retrieving revision 1.6.2.12.2.12
yann@402
    29
diff -c -3 -p -r1.6.2.12.2.12 coverage.c
yann@402
    30
*** gcc-old/gcc/coverage.c	18 May 2005 07:37:31 -0000	1.6.2.12.2.12
yann@402
    31
--- gcc/gcc/coverage.c	18 May 2005 22:45:36 -0000
yann@402
    32
*************** coverage_checksum_string (unsigned chksu
yann@402
    33
*** 471,505 ****
yann@402
    34
       as the checksums are used only for sanity checking.  */
yann@402
    35
    for (i = 0; string[i]; i++)
yann@402
    36
      {
yann@402
    37
        if (!strncmp (string + i, "_GLOBAL__", 9))
yann@402
    38
! 	for (i = i + 9; string[i]; i++)
yann@402
    39
! 	  if (string[i]=='_')
yann@402
    40
! 	    {
yann@402
    41
! 	      int y;
yann@402
    42
! 	      unsigned seed;
yann@402
    43
! 	      int scan;
yann@402
    44
! 
yann@402
    45
! 	      for (y = 1; y < 9; y++)
yann@402
    46
! 		if (!(string[i + y] >= '0' && string[i + y] <= '9')
yann@402
    47
! 		    && !(string[i + y] >= 'A' && string[i + y] <= 'F'))
yann@402
    48
! 		  break;
yann@402
    49
! 	      if (y != 9 || string[i + 9] != '_')
yann@402
    50
! 		continue;
yann@402
    51
! 	      for (y = 10; y < 18; y++)
yann@402
    52
! 		if (!(string[i + y] >= '0' && string[i + y] <= '9')
yann@402
    53
! 		    && !(string[i + y] >= 'A' && string[i + y] <= 'F'))
yann@402
    54
! 		  break;
yann@402
    55
! 	      if (y != 18)
yann@402
    56
! 		continue;
yann@402
    57
! 	      scan = sscanf (string + i + 10, "%X", &seed);
yann@402
    58
! 	      gcc_assert (scan);
yann@402
    59
! 	      if (seed != crc32_string (0, flag_random_seed))
yann@402
    60
! 		continue;
yann@402
    61
! 	      string = dup = xstrdup (string);
yann@402
    62
! 	      for (y = 10; y < 18; y++)
yann@402
    63
! 		dup[i + y] = '0';
yann@402
    64
! 	      break;
yann@402
    65
! 	    }
yann@402
    66
        break;
yann@402
    67
      }
yann@402
    68
  
yann@402
    69
--- 471,511 ----
yann@402
    70
       as the checksums are used only for sanity checking.  */
yann@402
    71
    for (i = 0; string[i]; i++)
yann@402
    72
      {
yann@402
    73
+       int offset = 0;
yann@402
    74
+       if (!strncmp (string + i, "_GLOBAL__N_", 11))
yann@402
    75
+ 	offset = 11;
yann@402
    76
        if (!strncmp (string + i, "_GLOBAL__", 9))
yann@402
    77
! 	offset = 9;
yann@402
    78
! 
yann@402
    79
!       /* C++ namespaces do have scheme:
yann@402
    80
!          _GLOBAL__N_<filename>_<wrongmagicnumber>_<magicnumber>functionname
yann@402
    81
! 	 since filename might contain extra underscores there seems
yann@402
    82
! 	 to be no better chance then walk all possible offsets looking
yann@402
    83
! 	 for magicnuber.  */
yann@402
    84
!       if (offset)
yann@402
    85
!         for (;string[offset]; offset++)
yann@402
    86
! 	  for (i = i + offset; string[i]; i++)
yann@402
    87
! 	    if (string[i]=='_')
yann@402
    88
! 	      {
yann@402
    89
! 		int y;
yann@402
    90
! 
yann@402
    91
! 		for (y = 1; y < 9; y++)
yann@402
    92
! 		  if (!(string[i + y] >= '0' && string[i + y] <= '9')
yann@402
    93
! 		      && !(string[i + y] >= 'A' && string[i + y] <= 'F'))
yann@402
    94
! 		    break;
yann@402
    95
! 		if (y != 9 || string[i + 9] != '_')
yann@402
    96
! 		  continue;
yann@402
    97
! 		for (y = 10; y < 18; y++)
yann@402
    98
! 		  if (!(string[i + y] >= '0' && string[i + y] <= '9')
yann@402
    99
! 		      && !(string[i + y] >= 'A' && string[i + y] <= 'F'))
yann@402
   100
! 		    break;
yann@402
   101
! 		if (y != 18)
yann@402
   102
! 		  continue;
yann@402
   103
! 		if (!dup)
yann@402
   104
! 		  string = dup = xstrdup (string);
yann@402
   105
! 		for (y = 10; y < 18; y++)
yann@402
   106
! 		  dup[i + y] = '0';
yann@402
   107
! 	      }
yann@402
   108
        break;
yann@402
   109
      }
yann@402
   110
  
yann@402
   111
yann@402
   112
yann@402
   113
-- 
yann@402
   114
yann@402
   115
yann@402
   116
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20815
yann@402
   117
yann@402
   118
------- You are receiving this mail because: -------
yann@402
   119
You reported the bug, or are watching the reporter.
yann@402
   120
yann@402
   121