re PR fortran/36251 (PUBLIC and PRIVATE abuse)

2008-05-18  Steven G. Kargl  <kargls@comcast.net>

        PR fortran/36251
        * symbol.c (check_conflict): Issue errors for abuse of PUBLIC,
        * PRIVATE,
        and BIND(C).
        * resolve.c (gfc_verify_binding_labels): Fix NULL pointer
        * dereference.

2008-05-18  Steven G. Kargl  <kargls@comcast.net>

        PR fortran/36251
        gfortran.dg/public_private_module.f90: new test.
        gfortran.dg/bind_c_module.f90: new test.

From-SVN: r135495
This commit is contained in:
Tobias Burnus 2008-05-18 13:10:11 +02:00
parent e29cc9b402
commit e7bff0d1d5
6 changed files with 77 additions and 7 deletions

View file

@ -1,11 +1,18 @@
2008-05-16 Tobias Burnus <burnus@net-b.de>
2008-05-18 Steven G. Kargl <kargls@comcast.net>
PR fortran/36251
* symbol.c (check_conflict): Issue errors for abuse of PUBLIC, PRIVATE,
and BIND(C).
* resolve.c (gfc_verify_binding_labels): Fix NULL pointer dereference.
2008-05-17 Tobias Burnus <burnus@net-b.de>
* intrinsic.texi: Correct description of GET_COMMAND_ARGUMENT
and GET_ENVIRONMENT_VARIABLE; fix keyword= name for GETENV,
GETLOG, GMTIME, HOSTNM, IRAND, ITIME, KILL.
Move LOG_GAMMA after LOG10.
2008-05-16 Tobias Burnus <burnus@net-b.de>
2008-05-17 Tobias Burnus <burnus@net-b.de>
* intrinsic.c (add_functions): Change FLUSH(C) to FLUSH(UNIT).
* intrinsic.texi: Change INTEGER(*) to INTEGER; fix keyword= name for

View file

@ -6612,10 +6612,10 @@ gfc_verify_binding_labels (gfc_symbol *sym)
has_error = 1;
}
else if (sym->attr.contained == 0
&& (sym->attr.if_source == IFSRC_UNKNOWN))
if ((sym->attr.use_assoc
&& (strcmp (bind_c_sym->mod_name, sym->module) != 0))
|| sym->attr.use_assoc == 0)
&& sym->attr.if_source == IFSRC_UNKNOWN)
if ((sym->attr.use_assoc && bind_c_sym->mod_name
&& strcmp (bind_c_sym->mod_name, sym->module) != 0)
|| sym->attr.use_assoc == 0)
{
gfc_error ("Binding label '%s' at %L collides with global "
"entity '%s' at %L", sym->binding_label,

View file

@ -595,6 +595,21 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
conf2 (function);
conf2 (subroutine);
conf2 (threadprivate);
if (attr->access == ACCESS_PUBLIC || attr->access == ACCESS_PRIVATE)
{
a2 = attr->access == ACCESS_PUBLIC ? public : private;
gfc_error ("%s attribute applied to %s %s at %L", a2, a1,
name, where);
return FAILURE;
}
if (attr->is_bind_c)
{
gfc_error_now ("BIND(C) applied to %s %s at %L", a1, name, where);
return FAILURE;
}
break;
case FL_VARIABLE:
@ -3625,7 +3640,8 @@ add_proc_interface (gfc_symbol *sym, ifsrc source,
declaration statement (see match_proc_decl()) to create the formal
args based on the args of a given named interface. */
void copy_formal_args (gfc_symbol *dest, gfc_symbol *src)
void
copy_formal_args (gfc_symbol *dest, gfc_symbol *src)
{
gfc_formal_arglist *head = NULL;
gfc_formal_arglist *tail = NULL;

View file

@ -1,3 +1,9 @@
2008-05-18 Steven G. Kargl <kargls@comcast.net>
PR fortran/36251
gfortran.dg/public_private_module.f90: new test.
gfortran.dg/bind_c_module.f90: new test.
2008-05-17 Xinliang David Li <davidxl@google.com>
* gcc.dg/cdce1.c: New test

View file

@ -0,0 +1,22 @@
! { dg-do compile }
! See PR fortran/36251.
module a
implicit none
integer :: i = 42
end module a
! Causes ICE
module b
use iso_c_binding
use a
implicit none
bind(c) :: a ! { dg-error "attribute applied to" }
end module b
! Causes ICE
module d
use a
implicit none
bind(c) :: a ! { dg-error "attribute applied to" }
end module d
! { dg-final { cleanup-modules "a" } }

View file

@ -0,0 +1,19 @@
! { dg-do compile }
! See PR fortran/36251.
module a
implicit none
integer :: i = 42
end module a
module b
use a
implicit none
public a ! { dg-warning "attribute applied to" }
end module b
module d
use a
implicit none
private a ! { dg-warning "attribute applied to" }
end module d
! { dg-final { cleanup-modules "a" } }