Patchwork [asan] Patch - fix an ICE in asan.c

login
register
mail settings
Submitter Markus Trippelsdorf
Date Nov. 12, 2012, 8:28 p.m.
Message ID <20121112202831.GA239@x4>
Download mbox | patch
Permalink /patch/198457/
State New
Headers show

Comments

Markus Trippelsdorf - Nov. 12, 2012, 8:28 p.m.
On 2012.11.12 at 19:02 +0100, Jakub Jelinek wrote:
> On Mon, Nov 12, 2012 at 06:13:08PM +0100, Markus Trippelsdorf wrote:
> > Another ICE:
> > 
> >  % cat test.ii
> >  int i;
> > 
> >  % g++ -faddress-sanitizer -c -g -O1 test.ii
> > test.ii:1:7: internal compiler error: Segmentation fault
> >   int i;
> >        ^
> 
> The RECORD_TYPE doesn't have lang specific payload allocated for it.
> There is no point why we need to describe that in the debug info though.
> 
> So I'd do something like:
> 
> 2012-11-12  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* asan.c (report_error_func): Set DECL_IGNORED_P, don't touch
> 	DECL_ASSEMBLER_NAME.
> 	(asan_init_func): Likewise.
> 	(asan_finish_file): Use void * instead of __asan_global * as
> 	type of __asan_{,un}register_globals.  Set DECL_IGNORED_P on
> 	the decls.

Thanks.
With your patch applied, it is now possible to successfully (lto-)
bootstrap gcc with CC="gcc -faddress-sanitizer" 
CXX="g++ -faddress-sanitizer".

One just has to apply the following patch from H.J. (that originally
fixed --enable-checking=valgrind):

Patch

diff --git a/libcpp/charset.c b/libcpp/charset.c
index cba19a6..6d67bca 100644
--- a/libcpp/charset.c
+++ b/libcpp/charset.c
@@ -1731,7 +1731,10 @@  _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
   /* Resize buffer if we allocated substantially too much, or if we
      haven't enough space for the \n-terminator.  */
   if (to.len + 4096 < to.asize || to.len >= to.asize)
-    to.text = XRESIZEVEC (uchar, to.text, to.len + 1);
+    {
+      to.text = XRESIZEVEC (uchar, to.text, to.len + 17);
+      memset (to.text + to.len + 1, 0, 16);
+    }
 
   /* If the file is using old-school Mac line endings (\r only),
      terminate with another \r, not an \n, so that we do not mistake