diff mbox

Fix PR56694

Message ID 51543A16.7070505@arm.com
State New
Headers show

Commit Message

Tejas Belagod March 28, 2013, 12:39 p.m. UTC
Richard Biener wrote:
> This fixes PR56694 - the code keeping BLOCKs live is not looking
> at the EH tree for references.  In the must-not-throw failure_loc
> such references can now appear.
> 
> Fixed by reverting that to 4.7 behavior.
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk
> and 4.8 branch.
> 
> Richard.
> 
> 2013-03-25  Richard Biener  <rguenther@suse.de>
> 
> 	PR middle-end/56694
> 	* tree-eh.c (lower_eh_must_not_throw): Strip BLOCKs from the
> 	must-not-throw stmt location.
> 
> 	* g++.dg/torture/pr56694.C: New testcase.
> 
> Index: gcc/tree-eh.c
> ===================================================================
> *** gcc/tree-eh.c	(revision 197029)
> --- gcc/tree-eh.c	(working copy)
> *************** lower_eh_must_not_throw (struct leh_stat
> *** 1855,1861 ****
>         this_region = gen_eh_region_must_not_throw (state->cur_region);
>         this_region->u.must_not_throw.failure_decl
>   	= gimple_eh_must_not_throw_fndecl (inner);
> !       this_region->u.must_not_throw.failure_loc = gimple_location (tp);
>   
>         /* In order to get mangling applied to this decl, we must mark it
>   	 used now.  Otherwise, pass_ipa_free_lang_data won't think it
> --- 1855,1862 ----
>         this_region = gen_eh_region_must_not_throw (state->cur_region);
>         this_region->u.must_not_throw.failure_decl
>   	= gimple_eh_must_not_throw_fndecl (inner);
> !       this_region->u.must_not_throw.failure_loc
> ! 	= LOCATION_LOCUS (gimple_location (tp));
>   
>         /* In order to get mangling applied to this decl, we must mark it
>   	 used now.  Otherwise, pass_ipa_free_lang_data won't think it
> Index: gcc/testsuite/g++.dg/torture/pr56694.C
> ===================================================================
> *** gcc/testsuite/g++.dg/torture/pr56694.C	(revision 0)
> --- gcc/testsuite/g++.dg/torture/pr56694.C	(working copy)
> ***************
> *** 0 ****
> --- 1,30 ----
> + // { dg-do compile }
> + // { dg-options "-fopenmp" }
> + 

Hi,

This fails to build on 'bare-metal'(non-OS) targets. The attached patch fixes 
this from FAIL -> UNSUPPORTED for bare-metal targets.

Tested on bare-metal aarch64 (aarch64-none-elf).

OK?

Thanks,
Tejas Belagod.
ARM.

Changelog:

2013-03-28  Tejas Belagod  <tejas.belagod@arm.com>

testsuite/
	* g++.dg/torture/pr56694.C: Fix test case to build on bare-metal
	targets.

Comments

Richard Biener March 28, 2013, 12:42 p.m. UTC | #1
On Thu, 28 Mar 2013, Tejas Belagod wrote:

> Richard Biener wrote:
> > This fixes PR56694 - the code keeping BLOCKs live is not looking
> > at the EH tree for references.  In the must-not-throw failure_loc
> > such references can now appear.
> > 
> > Fixed by reverting that to 4.7 behavior.
> > 
> > Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk
> > and 4.8 branch.
> > 
> > Richard.
> > 
> > 2013-03-25  Richard Biener  <rguenther@suse.de>
> > 
> > 	PR middle-end/56694
> > 	* tree-eh.c (lower_eh_must_not_throw): Strip BLOCKs from the
> > 	must-not-throw stmt location.
> > 
> > 	* g++.dg/torture/pr56694.C: New testcase.
> > 
> > Index: gcc/tree-eh.c
> > ===================================================================
> > *** gcc/tree-eh.c	(revision 197029)
> > --- gcc/tree-eh.c	(working copy)
> > *************** lower_eh_must_not_throw (struct leh_stat
> > *** 1855,1861 ****
> >         this_region = gen_eh_region_must_not_throw (state->cur_region);
> >         this_region->u.must_not_throw.failure_decl
> >   	= gimple_eh_must_not_throw_fndecl (inner);
> > !       this_region->u.must_not_throw.failure_loc = gimple_location (tp);
> >           /* In order to get mangling applied to this decl, we must mark it
> >   	 used now.  Otherwise, pass_ipa_free_lang_data won't think it
> > --- 1855,1862 ----
> >         this_region = gen_eh_region_must_not_throw (state->cur_region);
> >         this_region->u.must_not_throw.failure_decl
> >   	= gimple_eh_must_not_throw_fndecl (inner);
> > !       this_region->u.must_not_throw.failure_loc
> > ! 	= LOCATION_LOCUS (gimple_location (tp));
> >           /* In order to get mangling applied to this decl, we must mark it
> >   	 used now.  Otherwise, pass_ipa_free_lang_data won't think it
> > Index: gcc/testsuite/g++.dg/torture/pr56694.C
> > ===================================================================
> > *** gcc/testsuite/g++.dg/torture/pr56694.C	(revision 0)
> > --- gcc/testsuite/g++.dg/torture/pr56694.C	(working copy)
> > ***************
> > *** 0 ****
> > --- 1,30 ----
> > + // { dg-do compile }
> > + // { dg-options "-fopenmp" }
> > + 
> 
> Hi,
> 
> This fails to build on 'bare-metal'(non-OS) targets. The attached patch fixes
> this from FAIL -> UNSUPPORTED for bare-metal targets.
> 
> Tested on bare-metal aarch64 (aarch64-none-elf).
> 
> OK?

Ok for trunk and branch.

Thanks,
Richard.

> Thanks,
> Tejas Belagod.
> ARM.
> 
> Changelog:
> 
> 2013-03-28  Tejas Belagod  <tejas.belagod@arm.com>
> 
> testsuite/
> 	* g++.dg/torture/pr56694.C: Fix test case to build on bare-metal
> 	targets.
diff mbox

Patch

diff --git a/gcc/testsuite/g++.dg/torture/pr56694.C b/gcc/testsuite/g++.dg/torture/pr56694.C
index 22bfe3c..d3de051 100644
--- a/gcc/testsuite/g++.dg/torture/pr56694.C
+++ b/gcc/testsuite/g++.dg/torture/pr56694.C
@@ -1,5 +1,6 @@ 
 // { dg-do compile }
 // { dg-options "-fopenmp" }
+// { dg-require-effective-target fopenmp }
 
 class GException {
 public: