diff mbox

fortran/66052 -- Prevent dereference of NULL pointer

Message ID 20150515151915.GG82729@troutmask.apl.washington.edu
State New
Headers show

Commit Message

Steve Kargl May 15, 2015, 3:19 p.m. UTC
Regression tested on trunk.  OK to commit?

Subject says it all.

2015-05-XX  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/66052
	* decl.c(gfc_match_protected): Prevent dereference of NULL pointer. 

2015-05-XX  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/66052
	* gfortran.dg/protected_9.f90: New test.

Comments

Mikael Morin May 16, 2015, 11:58 a.m. UTC | #1
Le 15/05/2015 17:19, Steve Kargl a écrit :
> Regression tested on trunk.  OK to commit?
> 

Hello,

> Index: gcc/fortran/decl.c
> ===================================================================
> --- gcc/fortran/decl.c	(revision 223094)
> +++ gcc/fortran/decl.c	(working copy)
> @@ -6968,7 +6968,8 @@ gfc_match_protected (void)
>    gfc_symbol *sym;
>    match m;
>  
> -  if (gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
> +  if (gfc_current_ns->proc_name
> +      && gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
>      {
>         gfc_error ("PROTECTED at %C only allowed in specification "
>  		  "part of a module");

Wouldn't one get a slightly better error message if using
	!gfc_current_ns->proc_name
	|| gfc_current_ns->proc_name->attr.flavor != FL_MODULE
as condition ?

OK with that change.  Thanks.

Mikael
Steve Kargl May 18, 2015, 10:53 p.m. UTC | #2
On Sat, May 16, 2015 at 01:58:30PM +0200, Mikael Morin wrote:
> > Index: gcc/fortran/decl.c
> > ===================================================================
> > --- gcc/fortran/decl.c	(revision 223094)
> > +++ gcc/fortran/decl.c	(working copy)
> > @@ -6968,7 +6968,8 @@ gfc_match_protected (void)
> >    gfc_symbol *sym;
> >    match m;
> >  
> > -  if (gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
> > +  if (gfc_current_ns->proc_name
> > +      && gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
> >      {
> >         gfc_error ("PROTECTED at %C only allowed in specification "
> >  		  "part of a module");
> 
> Wouldn't one get a slightly better error message if using
> 	!gfc_current_ns->proc_name
> 	|| gfc_current_ns->proc_name->attr.flavor != FL_MODULE
> as condition ?
> 
> OK with that change.  Thanks.
> 

Committed ar r223324 with your suggested change.  Indeed, 
a better error messaage emitted.
diff mbox

Patch

Index: gcc/fortran/decl.c
===================================================================
--- gcc/fortran/decl.c	(revision 223094)
+++ gcc/fortran/decl.c	(working copy)
@@ -6968,7 +6968,8 @@  gfc_match_protected (void)
   gfc_symbol *sym;
   match m;
 
-  if (gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
+  if (gfc_current_ns->proc_name
+      && gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
     {
        gfc_error ("PROTECTED at %C only allowed in specification "
 		  "part of a module");
Index: gcc/testsuite/gfortran.dg/protected_9.f90
===================================================================
--- gcc/testsuite/gfortran.dg/protected_9.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/protected_9.f90	(working copy)
@@ -0,0 +1,16 @@ 
+! { dg-do compile }
+! PR fortran/66052
+!
+!
+! Original code from Gerhard Steinmetz
+! <gerhard dot steinmetz dot fortran at t-online dot de>
+module a
+  contains
+  protected x   ! { dg-error "Unexpected attribute declaration statement" }
+end module a
+
+program p
+   contains
+   protected x  ! { dg-error "Unexpected attribute declaration statement" }
+end
+