From patchwork Tue Dec 4 11:22:20 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Fortran] PR55343 - Fix ICE with renaming of symbols of intrinsic modules Date: Tue, 04 Dec 2012 01:22:20 -0000 From: Tobias Burnus X-Patchwork-Id: 203611 Message-Id: <50BDDCEC.2040403@net-b.de> To: gcc patches , gfortran We freed the renamed symbol for intrinsic modules too early, if they actually exist on the disk as the name is used in trans*.c. (For "file" modules, the data is later freed with the namespace by calling gfc_free_use_stmts.) Build and regtested on x86-64-gnu-linux. OK for the trunk? Tobias 2012-12-04 Tobias Burnus PR fortran/55343 * module.c (gfc_use_module): Free rename list only for internally generated intrinsic modules. 2012-12-04 Tobias Burnus PR fortran/55343 * gfortran.dg/gomp/use_intrinsic_1.f90: New. diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 16ea97b..cde5739 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -6157,6 +6157,8 @@ gfc_use_module (gfc_use_list *module) "intrinsic module at %C") != FAILURE) { use_iso_fortran_env_module (); + free_rename (module->rename); + module->rename = NULL; gfc_current_locus = old_locus; module->intrinsic = true; return; @@ -6167,6 +6169,8 @@ gfc_use_module (gfc_use_list *module) "ISO_C_BINDING module at %C") != FAILURE) { import_iso_c_binding_module(); + free_rename (module->rename); + module->rename = NULL; gfc_current_locus = old_locus; module->intrinsic = true; return; @@ -6359,8 +6363,6 @@ gfc_use_modules (void) next = module_list->next; rename_list_remove_duplicate (module_list->rename); gfc_use_module (module_list); - if (module_list->intrinsic) - free_rename (module_list->rename); free (module_list); } gfc_rename_list = NULL; diff --git a/gcc/testsuite/gfortran.dg/gomp/use_intrinsic_1.f90 b/gcc/testsuite/gfortran.dg/gomp/use_intrinsic_1.f90 new file mode 100644 index 0000000..cab3526 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/use_intrinsic_1.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! +! PR fortran/55343 +! +! Contributed by Erik Toussaint +! + +use, intrinsic :: omp_lib, only: omp_get_num_threads +use, intrinsic :: omp_lib_kinds , foo => omp_lock_kind +print *, foo +end