aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>2007-01-20 19:33:20 +0100
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2007-01-20 18:33:20 +0000
commite6472bcede51c6d029a60fe644f50c982d689c53 (patch)
tree420164ab04b47273cddf4ac4aa692f1d7a3797dd /gcc
parentb153d3e1cab96c4c95abfc4ae957775ad92379aa (diff)
downloadgcc-e6472bcede51c6d029a60fe644f50c982d689c53.zip
gcc-e6472bcede51c6d029a60fe644f50c982d689c53.tar.gz
gcc-e6472bcede51c6d029a60fe644f50c982d689c53.tar.bz2
gfortran.h (gfc_options_t): Add flag_allow_leading_underscore.
* gfortran.h (gfc_options_t): Add flag_allow_leading_underscore. * lang.opt: Add -fallow-leading-underscore. * match.c (gfc_match_name): Allow leading underscore in symbol name if -fallow-leading-underscore is used. * symbol.c (gfc_get_default_type): Add special case for symbol names beginning with an underscore. * trans-decl.c (gfc_get_extern_function_decl, gfc_build_intrinsic_function_decls): Add _gfortran prefix to library symbols selected_int_kind, selected_real_kind and all specifics. * options.c (gfc_init_options, gfc_handle_option): Handle the new -fallow-leading-underscore option. * m4/misc_specifics.m4: Add _gfortran prefix to specific names. * m4/specific2.m4: Likewise. * m4/specific.m4: Likewise. * intrinsics/f2c_specifics.F90: Likewise. * intrinsics/selected_int_kind.f90: Add _gfortran prefix. * intrinsics/selected_real_kind.f90: Likewise. * intrinsics/dprod_r8.f90: Likewise. * Makefile.am: Add -fallow-leading-underscore to the gfor_specific_src files, as well as selected_real_kind.F90 and selected_int_kind.F90 * Makefile.in: Regenerate. * generated/_sqrt_c8.F90: Regenerate. * generated/_sign_r16.F90: Regenerate. * generated/_log_c16.F90: Regenerate. * generated/_sin_c10.F90: Regenerate. * generated/_tanh_r4.F90: Regenerate. * generated/_tanh_r8.F90: Regenerate. * generated/_log10_r10.F90: Regenerate. * generated/_aimag_c4.F90: Regenerate. * generated/_sign_r4.F90: Regenerate. * generated/_aimag_c8.F90: Regenerate. * generated/_sign_r8.F90: Regenerate. * generated/_mod_i4.F90: Regenerate. * generated/_cos_r16.F90: Regenerate. * generated/_aint_r10.F90: Regenerate. * generated/_mod_i8.F90: Regenerate. * generated/_abs_i16.F90: Regenerate. * generated/_sqrt_c10.F90: Regenerate. * generated/_atan2_r4.F90: Regenerate. * generated/_cos_c4.F90: Regenerate. * generated/_atan_r16.F90: Regenerate. * generated/_tanh_r10.F90: Regenerate. * generated/_atan2_r8.F90: Regenerate. * generated/_cos_c8.F90: Regenerate. * generated/_exp_r4.F90: Regenerate. * generated/_log_r10.F90: Regenerate. * generated/_exp_r8.F90: Regenerate. * generated/_abs_r4.F90: Regenerate. * generated/_abs_r8.F90: Regenerate. * generated/_sin_r16.F90: Regenerate. * generated/_tan_r4.F90: Regenerate. * generated/_tan_r8.F90: Regenerate. * generated/_sign_i4.F90: Regenerate. * generated/_sign_i8.F90: Regenerate. * generated/_exp_c16.F90: Regenerate. * generated/_sqrt_r16.F90: Regenerate. * generated/_conjg_c4.F90: Regenerate. * generated/_conjg_c8.F90: Regenerate. * generated/_dim_r16.F90: Regenerate. * generated/_mod_r10.F90: Regenerate. * generated/_abs_c10.F90: Regenerate. * generated/_conjg_c16.F90: Regenerate. * generated/_tan_r16.F90: Regenerate. * generated/_asinh_r10.F90: Regenerate. * generated/_abs_i4.F90: Regenerate. * generated/_abs_i8.F90: Regenerate. * generated/_acos_r10.F90: Regenerate. * generated/_exp_r10.F90: Regenerate. * generated/_acosh_r16.F90: Regenerate. * generated/_atan2_r16.F90: Regenerate. * generated/_cos_c16.F90: Regenerate. * generated/_mod_i16.F90: Regenerate. * generated/_asin_r4.F90: Regenerate. * generated/_anint_r16.F90: Regenerate. * generated/_asin_r8.F90: Regenerate. * generated/_aimag_c10.F90: Regenerate. * generated/_exp_c4.F90: Regenerate. * generated/_sinh_r10.F90: Regenerate. * generated/_exp_c8.F90: Regenerate. * generated/_log10_r4.F90: Regenerate. * generated/_log10_r8.F90: Regenerate. * generated/_abs_c4.F90: Regenerate. * generated/_abs_r16.F90: Regenerate. * generated/_abs_c8.F90: Regenerate. * generated/_asin_r10.F90: Regenerate. * generated/_sign_r10.F90: Regenerate. * generated/_atanh_r16.F90: Regenerate. * generated/_log_c10.F90: Regenerate. * generated/_cosh_r16.F90: Regenerate. * generated/_sin_c16.F90: Regenerate. * generated/_cos_r10.F90: Regenerate. * generated/_log10_r16.F90: Regenerate. * generated/_aint_r16.F90: Regenerate. * generated/_acos_r4.F90: Regenerate. * generated/_acos_r8.F90: Regenerate. * generated/_sqrt_c16.F90: Regenerate. * generated/_acosh_r4.F90: Regenerate. * generated/_atan_r10.F90: Regenerate. * generated/_acosh_r8.F90: Regenerate. * generated/_sign_i16.F90: Regenerate. * generated/_tanh_r16.F90: Regenerate. * generated/_log_r4.F90: Regenerate. * generated/_log_r8.F90: Regenerate. * generated/_sin_r4.F90: Regenerate. * generated/_sin_r8.F90: Regenerate. * generated/_log_r16.F90: Regenerate. * generated/_sin_r10.F90: Regenerate. * generated/_sqrt_r4.F90: Regenerate. * generated/_exp_c10.F90: Regenerate. * generated/_sqrt_r8.F90: Regenerate. * generated/_asinh_r4.F90: Regenerate. * generated/_sqrt_r10.F90: Regenerate. * generated/_asinh_r8.F90: Regenerate. * generated/_dim_r4.F90: Regenerate. * generated/_dim_r8.F90: Regenerate. * generated/_dim_r10.F90: Regenerate. * generated/_cosh_r4.F90: Regenerate. * generated/_conjg_c10.F90: Regenerate. * generated/_tan_r10.F90: Regenerate. * generated/_cosh_r8.F90: Regenerate. * generated/_mod_r16.F90: Regenerate. * generated/_abs_c16.F90: Regenerate. * generated/_cos_r4.F90: Regenerate. * generated/_asinh_r16.F90: Regenerate. * generated/_cos_r8.F90: Regenerate. * generated/_atanh_r4.F90: Regenerate. * generated/_atanh_r8.F90: Regenerate. * generated/_acos_r16.F90: Regenerate. * generated/_anint_r4.F90: Regenerate. * generated/_acosh_r10.F90: Regenerate. * generated/_anint_r8.F90: Regenerate. * generated/_exp_r16.F90: Regenerate. * generated/_mod_r4.F90: Regenerate. * generated/_cos_c10.F90: Regenerate. * generated/_atan2_r10.F90: Regenerate. * generated/_dim_i16.F90: Regenerate. * generated/_mod_r8.F90: Regenerate. * generated/_anint_r10.F90: Regenerate. * generated/_aint_r4.F90: Regenerate. * generated/_aint_r8.F90: Regenerate. * generated/_dim_i4.F90: Regenerate. * generated/_sinh_r4.F90: Regenerate. * generated/_log_c4.F90: Regenerate. * generated/_dim_i8.F90: Regenerate. * generated/_sinh_r8.F90: Regenerate. * generated/_log_c8.F90: Regenerate. * generated/_sin_c4.F90: Regenerate. * generated/_sin_c8.F90: Regenerate. * generated/misc_specifics.F90: Regenerate. * generated/_abs_r10.F90: Regenerate. * generated/_aimag_c16.F90: Regenerate. * generated/_atan_r4.F90: Regenerate. * generated/_sinh_r16.F90: Regenerate. * generated/_atan_r8.F90: Regenerate. * generated/_atanh_r10.F90: Regenerate. * generated/_cosh_r10.F90: Regenerate. * generated/_sqrt_c4.F90: Regenerate. * generated/_asin_r16.F90: Regenerate. From-SVN: r121007
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog15
-rw-r--r--gcc/fortran/gfortran.h1
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/match.c2
-rw-r--r--gcc/fortran/options.c5
-rw-r--r--gcc/fortran/symbol.c6
-rw-r--r--gcc/fortran/trans-decl.c12
7 files changed, 39 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 99a39b2..3e16d4c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,20 @@
2007-01-20 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+ * gfortran.h (gfc_options_t): Add flag_allow_leading_underscore.
+ * lang.opt: Add -fallow-leading-underscore.
+ * match.c (gfc_match_name): Allow leading underscore in symbol
+ name if -fallow-leading-underscore is used.
+ * symbol.c (gfc_get_default_type): Add special case for symbol
+ names beginning with an underscore.
+ * trans-decl.c (gfc_get_extern_function_decl,
+ gfc_build_intrinsic_function_decls): Add _gfortran prefix to
+ library symbols selected_int_kind, selected_real_kind and
+ all specifics.
+ * options.c (gfc_init_options, gfc_handle_option): Handle the
+ new -fallow-leading-underscore option.
+
+2007-01-20 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
PR fortran/30446
* options.c (gfc_handle_module_path_options): Path used in -J
option is now added to the module search path.
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 64739fb..05b7ebc 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1656,6 +1656,7 @@ typedef struct
int flag_f2c;
int flag_automatic;
int flag_backslash;
+ int flag_allow_leading_underscore;
int flag_dump_core;
int flag_external_blas;
int blas_matmul_limit;
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 2991f7f..7d413ff 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -81,6 +81,10 @@ fall-intrinsics
Fortran RejectNegative
All intrinsics procedures are available regardless of selected standard
+fallow-leading-underscore
+Fortran Undocumented
+; For internal use only: allow the first character of symbol names to be an underscore
+
fautomatic
Fortran
Do not treat local variables and COMMON blocks as if they were named in SAVE statements
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index e3d37d2..0fa1f63 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -392,7 +392,7 @@ gfc_match_name (char *buffer)
gfc_gobble_whitespace ();
c = gfc_next_char ();
- if (!ISALPHA (c))
+ if (!(ISALPHA (c) || (c == '_' && gfc_option.flag_allow_leading_underscore)))
{
if (gfc_error_flag_test() == 0)
gfc_error ("Invalid character in name at %C");
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index aa1a940..8ead48f 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -84,6 +84,7 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED,
gfc_option.flag_preprocessed = 0;
gfc_option.flag_automatic = 1;
gfc_option.flag_backslash = 1;
+ gfc_option.flag_allow_leading_underscore = 0;
gfc_option.flag_dump_core = 0;
gfc_option.flag_external_blas = 0;
gfc_option.blas_matmul_limit = 30;
@@ -450,6 +451,10 @@ gfc_handle_option (size_t scode, const char *arg, int value)
gfc_option.flag_automatic = value;
break;
+ case OPT_fallow_leading_underscore:
+ gfc_option.flag_allow_leading_underscore = value;
+ break;
+
case OPT_fbackslash:
gfc_option.flag_backslash = value;
break;
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 85aff86..c130dee 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -202,6 +202,12 @@ gfc_get_default_type (gfc_symbol * sym, gfc_namespace * ns)
char letter;
letter = sym->name[0];
+
+ if (gfc_option.flag_allow_leading_underscore && letter == '_')
+ gfc_internal_error ("Option -fallow_leading_underscore is for use only by "
+ "gfortran developers, and should not be used for "
+ "implicitly typed variables");
+
if (letter < 'a' || letter > 'z')
gfc_internal_error ("gfc_get_default_type(): Bad symbol");
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 000772c..3028c8f 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1060,7 +1060,7 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
gfc_expr e;
gfc_intrinsic_sym *isym;
gfc_expr argexpr;
- char s[GFC_MAX_SYMBOL_LEN + 13]; /* "f2c_specific" and '\0'. */
+ char s[GFC_MAX_SYMBOL_LEN + 23]; /* "_gfortran_f2c_specific" and '\0'. */
tree name;
tree mangled_name;
@@ -1108,10 +1108,10 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
{
/* Specific which needs a different implementation if f2c
calling conventions are used. */
- sprintf (s, "f2c_specific%s", e.value.function.name);
+ sprintf (s, "_gfortran_f2c_specific%s", e.value.function.name);
}
else
- sprintf (s, "specific%s", e.value.function.name);
+ sprintf (s, "_gfortran_specific%s", e.value.function.name);
name = get_identifier (s);
mangled_name = name;
@@ -2082,13 +2082,15 @@ gfc_build_intrinsic_function_decls (void)
gfc_charlen_type_node, pchar_type_node);
gfor_fndecl_si_kind =
- gfc_build_library_function_decl (get_identifier ("selected_int_kind"),
+ gfc_build_library_function_decl (get_identifier
+ (PREFIX("selected_int_kind")),
gfc_int4_type_node,
1,
pvoid_type_node);
gfor_fndecl_sr_kind =
- gfc_build_library_function_decl (get_identifier ("selected_real_kind"),
+ gfc_build_library_function_decl (get_identifier
+ (PREFIX("selected_real_kind")),
gfc_int4_type_node,
2, pvoid_type_node,
pvoid_type_node);