diff options
author | Tobias Burnus <burnus@gcc.gnu.org> | 2007-07-05 14:51:51 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-07-05 14:51:51 +0200 |
commit | 5349080dd3851ea98ac1c9c8bf24279a7cd3ca97 (patch) | |
tree | 1281d63a921c00f8d91cb684061e182b7c459e18 /gcc | |
parent | 7e08fa357c2b918c28599f7d11dfc65165117de3 (diff) | |
download | gcc-5349080dd3851ea98ac1c9c8bf24279a7cd3ca97.zip gcc-5349080dd3851ea98ac1c9c8bf24279a7cd3ca97.tar.gz gcc-5349080dd3851ea98ac1c9c8bf24279a7cd3ca97.tar.bz2 |
re PR fortran/32359 (incorrect error: Threadprivate isn't SAVEd (implicit save attribute undefined))
gcc/fortran/
2007-07-05 Daniel Franke <franke.daniel@gmail.com>
Tobias Burnus <burnus@net-b.de>
PR fortran/32359
* gfortran.h (symbol_attribute): Change save attribute into an enum.
* decl.c (add_init_expr_to_sym): Set it to SAVE_IMPLICIT.
* symbol.c (gfc_add_save): Check for SAVE_EXPLICIT.
* resolve.c (resolve_fl_variable): Check for SAVE_EXPLICIT.
(resolve_symbol): Allow OMP threadprivate with
initialization SAVEd and save_all variable.
* trans-decl.c (gfc_finish_var_decl): Remove obsolete sym->value check.
libgomp/
2007-07-05 Tobias Burnus <burnus@net-b.de>
PR fortran/32359
* testsuite/libgomp.fortran/pr32359.f90: New.
gcc/testsuite/
2007-07-05 Tobias Burnus <burnus@net-b.de>
PR fortran/32359
* gfortran.dg/module_md5_1.f90: Update MD5 number.
From-SVN: r126366
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 1 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 10 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 7 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/module_md5_1.f90 | 2 |
7 files changed, 34 insertions, 7 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7504c71..0173eb3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,15 @@ +2007-07-05 Daniel Franke <franke.daniel@gmail.com> + Tobias Burnus <burnus@net-b.de> + + PR fortran/32359 + * gfortran.h (symbol_attribute): Change save attribute into an enum. + * decl.c (add_init_expr_to_sym): Set it to SAVE_IMPLICIT. + * symbol.c (gfc_add_save): Check for SAVE_EXPLICIT. + * resolve.c (resolve_fl_variable): Check for SAVE_EXPLICIT. + (resolve_symbol): Allow OMP threadprivate with + initialization SAVEd and save_all variable. + * trans-decl.c (gfc_finish_var_decl): Remove obsolete sym->value check. + 2007-07-05 Paul Thomas <pault@gcc.gnu.org> PR fortran/32526 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index b3bbe75..2c828ba 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1232,6 +1232,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus) } sym->value = init; + sym->attr.save = SAVE_IMPLICIT; *initp = NULL; } diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 6a0fd09..3c15c61 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -297,6 +297,12 @@ typedef enum ifsrc } ifsrc; +/* Whether a SAVE attribute was set explicitly or implictly. */ +typedef enum save_state +{ SAVE_NONE = 0, SAVE_EXPLICIT, SAVE_IMPLICIT +} +save_state; + /* Strings for all symbol attributes. We use these for dumping the parse tree, in error messages, and also when reading and writing modules. In symbol.c. */ @@ -620,10 +626,12 @@ typedef struct { /* Variable attributes. */ unsigned allocatable:1, dimension:1, external:1, intrinsic:1, - optional:1, pointer:1, save:1, target:1, value:1, volatile_:1, + optional:1, pointer:1, target:1, value:1, volatile_:1, dummy:1, result:1, assign:1, threadprivate:1, not_always_present:1, implied_index:1; + ENUM_BITFIELD (save_state) save:2; + unsigned data:1, /* Symbol is named in a DATA statement. */ protected:1, /* Symbol has been marked as protected. */ use_assoc:1, /* Symbol has been use-associated. */ diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 158abe0..299d430 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6508,8 +6508,9 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag) } } - /* Also, they must not have the SAVE attribute. */ - if (flag && sym->attr.save) + /* Also, they must not have the SAVE attribute. + SAVE_IMPLICIT is checked below. */ + if (flag && sym->attr.save == SAVE_EXPLICIT) { gfc_error (auto_save_msg, sym->name, &sym->declared_at); return FAILURE; @@ -7287,7 +7288,7 @@ resolve_symbol (gfc_symbol *sym) gfc_resolve (sym->formal_ns); /* Check threadprivate restrictions. */ - if (sym->attr.threadprivate && !sym->attr.save + if (sym->attr.threadprivate && !sym->attr.save && !sym->ns->save_all && (!sym->attr.in_common && sym->module == NULL && (sym->ns->proc_name == NULL diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index c7527bf..42f7776 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -925,7 +925,7 @@ gfc_add_save (symbol_attribute *attr, const char *name, locus *where) return FAILURE; } - if (attr->save) + if (attr->save == SAVE_EXPLICIT) { if (gfc_notify_std (GFC_STD_LEGACY, "Duplicate SAVE attribute specified at %L", @@ -934,7 +934,7 @@ gfc_add_save (symbol_attribute *attr, const char *name, locus *where) return FAILURE; } - attr->save = 1; + attr->save = SAVE_EXPLICIT; return check_conflict (attr, name, where); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 034f9cd..e7888e1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-07-05 Tobias Burnus <burnus@net-b.de> + + PR fortran/32359 + * gfortran.dg/module_md5_1.f90: Update MD5 number. + 2007-07-05 Paul Thomas <pault@gcc.gnu.org> PR fortran/32526 diff --git a/gcc/testsuite/gfortran.dg/module_md5_1.f90 b/gcc/testsuite/gfortran.dg/module_md5_1.f90 index 45792bd..6382df1 100644 --- a/gcc/testsuite/gfortran.dg/module_md5_1.f90 +++ b/gcc/testsuite/gfortran.dg/module_md5_1.f90 @@ -10,5 +10,5 @@ program test use foo print *, pi end program test -! { dg-final { scan-module "foo" "MD5:10e58dd12566bfc60412da6f8f8f7a07" } } +! { dg-final { scan-module "foo" "MD5:6d026a84bb779a7b6789854d85d4f01f" } } ! { dg-final { cleanup-modules "foo" } } |