mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 15:00:55 +08:00
re PR fortran/40569 (F2008: Support COMPILER_OPTIONS() / COMPILER_VERSION())
gcc/ 2010-09-28 Tobias Burnus <burnus@net-b.de> PR fortran/40569 PR fortran/40568 * toplev.h (save_decoded_options, save_decoded_options_count): New global variables. * toplev.c (save_decoded_options, save_decoded_options_count): export variables. gcc/fortran/ 2010-09-28 Tobias Burnus <burnus@net-b.de> PR fortran/40569 PR fortran/40568 * intrinsic.c (add_functions): Make compiler_version and compiler_options CLASS_INQUIRY. * gfortran.h (gfc_get_option_string): New prototype. * intrinsic.texi (COMPILER_VERSION, COMPILER_OPTIONS): Add documentation. (C_SIZEOF): Mark as inquiry function of ISO_C_BINDING. (ISO_FORTRAN_ENV): Refer to COMPILER_VERSION and COMPILER_OPTIONS. (ISO_C_BINDING): Refer to C_SIZEOF. * options.c (gfc_get_option_string): New function. * simplify.c (gfc_simplify_compiler_options): Use it. (gfc_simplify_compiler_version): Include compiler name. From-SVN: r164698
This commit is contained in:
parent
770a498aee
commit
41804a5be0
@ -1,3 +1,12 @@
|
||||
2010-09-28 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/40569
|
||||
PR fortran/40568
|
||||
* toplev.h (save_decoded_options, save_decoded_options_count):
|
||||
New global variables.
|
||||
* toplev.c (save_decoded_options, save_decoded_options_count):
|
||||
export variables.
|
||||
|
||||
2010-09-28 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* config/i386/i386.c (ix86_supports_split_stack): Test
|
||||
|
@ -1,3 +1,19 @@
|
||||
2010-09-28 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/40569
|
||||
PR fortran/40568
|
||||
* intrinsic.c (add_functions): Make compiler_version and
|
||||
compiler_options CLASS_INQUIRY.
|
||||
* gfortran.h (gfc_get_option_string): New prototype.
|
||||
* intrinsic.texi (COMPILER_VERSION, COMPILER_OPTIONS):
|
||||
Add documentation.
|
||||
(C_SIZEOF): Mark as inquiry function of ISO_C_BINDING.
|
||||
(ISO_FORTRAN_ENV): Refer to COMPILER_VERSION and COMPILER_OPTIONS.
|
||||
(ISO_C_BINDING): Refer to C_SIZEOF.
|
||||
* options.c (gfc_get_option_string): New function.
|
||||
* simplify.c (gfc_simplify_compiler_options): Use it.
|
||||
(gfc_simplify_compiler_version): Include compiler name.
|
||||
|
||||
2010-09-28 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* f95-lang.c (gfc_define_builtin): Make leaf.
|
||||
|
@ -2403,6 +2403,7 @@ void gfc_init_options (unsigned int,
|
||||
bool gfc_handle_option (size_t, const char *, int, int,
|
||||
const struct cl_option_handlers *);
|
||||
bool gfc_post_options (const char **);
|
||||
char *gfc_get_option_string (void);
|
||||
|
||||
/* f95-lang.c */
|
||||
void gfc_maybe_initialize_eh (void);
|
||||
|
@ -2644,13 +2644,13 @@ add_functions (void)
|
||||
make_from_module();
|
||||
|
||||
/* COMPILER_OPTIONS and COMPILER_VERSION are part of ISO_FORTRAN_ENV. */
|
||||
add_sym_0 ("compiler_options", GFC_ISYM_COMPILER_OPTIONS, CLASS_IMPURE,
|
||||
ACTUAL_NO, BT_CHARACTER, 1, GFC_STD_F2008,
|
||||
add_sym_0 ("compiler_options", GFC_ISYM_COMPILER_OPTIONS, CLASS_INQUIRY,
|
||||
ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F2008,
|
||||
NULL, gfc_simplify_compiler_options, NULL);
|
||||
make_from_module();
|
||||
|
||||
add_sym_0 ("compiler_version", GFC_ISYM_COMPILER_VERSION, CLASS_IMPURE,
|
||||
ACTUAL_NO, BT_CHARACTER, 1, GFC_STD_F2008,
|
||||
add_sym_0 ("compiler_version", GFC_ISYM_COMPILER_VERSION, CLASS_INQUIRY,
|
||||
ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F2008,
|
||||
NULL, gfc_simplify_compiler_version, NULL);
|
||||
make_from_module();
|
||||
|
||||
|
@ -86,6 +86,8 @@ Some basic guidelines for editing this document:
|
||||
* @code{CMPLX}: CMPLX, Complex conversion function
|
||||
* @code{COMMAND_ARGUMENT_COUNT}: COMMAND_ARGUMENT_COUNT, Get number of command line arguments
|
||||
* @code{COMPLEX}: COMPLEX, Complex conversion function
|
||||
* @code{COMPILER_VERSION}: COMPILER_VERSION, Compiler version string
|
||||
* @code{COMPILER_OPTIONS}: COMPILER_OPTIONS, Options passed to the compiler
|
||||
* @code{CONJG}: CONJG, Complex conjugate function
|
||||
* @code{COS}: COS, Cosine function
|
||||
* @code{COSH}: COSH, Hyperbolic cosine function
|
||||
@ -2363,7 +2365,7 @@ expression @code{X} occupies.
|
||||
Fortran 2008
|
||||
|
||||
@item @emph{Class}:
|
||||
Intrinsic function
|
||||
Inquiry function of the module @code{ISO_C_BINDING}
|
||||
|
||||
@item @emph{Syntax}:
|
||||
@code{N = C_SIZEOF(X)}
|
||||
@ -2375,7 +2377,7 @@ Intrinsic function
|
||||
|
||||
@item @emph{Return value}:
|
||||
The return value is of type integer and of the system-dependent kind
|
||||
@var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
|
||||
@code{C_SIZE_T} (from the @code{ISO_C_BINDING} module). Its value is the
|
||||
number of bytes occupied by the argument. If the argument has the
|
||||
@code{POINTER} attribute, the number of bytes of the storage area pointed
|
||||
to is returned. If the argument is of a derived type with @code{POINTER}
|
||||
@ -2719,6 +2721,92 @@ end program test_command_argument_count
|
||||
|
||||
|
||||
|
||||
@node COMPILER_OPTIONS
|
||||
@section @code{COMPILER_OPTIONS} --- Options passed to the compiler
|
||||
@fnindex COMPILER_OPTIONS
|
||||
@cindex flags inquiry function
|
||||
@cindex options inquiry function
|
||||
@cindex compiler flags inquiry function
|
||||
|
||||
@table @asis
|
||||
@item @emph{Description}:
|
||||
@code{COMPILER_OPTIONS()} returns a string with the options used for
|
||||
compiling.
|
||||
|
||||
@item @emph{Standard}:
|
||||
Fortran 2008
|
||||
|
||||
@item @emph{Class}:
|
||||
Inquiry function of the module @code{ISO_FORTRAN_ENV}
|
||||
|
||||
@item @emph{Syntax}:
|
||||
@code{STR = COMPILER_OPTIONS()}
|
||||
|
||||
@item @emph{Arguments}:
|
||||
None.
|
||||
|
||||
@item @emph{Return value}:
|
||||
The return value is a default-kind string with system-dependent length.
|
||||
It contains the compiler flags used to compile the file, which called
|
||||
the @code{COMPILER_OPTIONS} intrinsic.
|
||||
|
||||
@item @emph{Example}:
|
||||
@smallexample
|
||||
use iso_fortran_env
|
||||
print '(4a)', 'This file was compiled by ', &
|
||||
compiler_version(), ' using the the options ', &
|
||||
compiler_options()
|
||||
end
|
||||
@end smallexample
|
||||
|
||||
@item @emph{See also}:
|
||||
@ref{COMPILER_VERSION}, @ref{ISO_FORTRAN_ENV}
|
||||
@end table
|
||||
|
||||
|
||||
|
||||
@node COMPILER_VERSION
|
||||
@section @code{COMPILER_VERSION} --- Compiler version string
|
||||
@fnindex COMPILER_VERSION
|
||||
@cindex compiler, name and version
|
||||
@cindex version of the compiler
|
||||
|
||||
@table @asis
|
||||
@item @emph{Description}:
|
||||
@code{COMPILER_VERSION()} returns a string with the name and the
|
||||
version of the compiler.
|
||||
|
||||
@item @emph{Standard}:
|
||||
Fortran 2008
|
||||
|
||||
@item @emph{Class}:
|
||||
Inquiry function of the module @code{ISO_FORTRAN_ENV}
|
||||
|
||||
@item @emph{Syntax}:
|
||||
@code{STR = COMPILER_VERSION()}
|
||||
|
||||
@item @emph{Arguments}:
|
||||
None.
|
||||
|
||||
@item @emph{Return value}:
|
||||
The return value is a default-kind string with system-dependent length.
|
||||
It contains the name of the compiler and its version number.
|
||||
|
||||
@item @emph{Example}:
|
||||
@smallexample
|
||||
use iso_fortran_env
|
||||
print '(4a)', 'This file was compiled by ', &
|
||||
compiler_version(), ' using the the options ', &
|
||||
compiler_options()
|
||||
end
|
||||
@end smallexample
|
||||
|
||||
@item @emph{See also}:
|
||||
@ref{COMPILER_OPTIONS}, @ref{ISO_FORTRAN_ENV}
|
||||
@end table
|
||||
|
||||
|
||||
|
||||
@node COMPLEX
|
||||
@section @code{COMPLEX} --- Complex conversion function
|
||||
@fnindex COMPLEX
|
||||
@ -12685,6 +12773,9 @@ Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
|
||||
denote that the lock variable is unlocked. (Fortran 2008 or later.)
|
||||
@end table
|
||||
|
||||
The module also provides the following intrinsic procedures:
|
||||
@ref{COMPILER_OPTIONS} and @ref{COMPILER_VERSION}.
|
||||
|
||||
|
||||
|
||||
@node ISO_C_BINDING
|
||||
@ -12704,6 +12795,7 @@ manual.
|
||||
@item @code{C_F_PROCPOINTER}
|
||||
@item @code{C_FUNLOC}
|
||||
@item @code{C_LOC}
|
||||
@item @code{C_SIZEOF}
|
||||
@end table
|
||||
@c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF,
|
||||
@c don't really know why.
|
||||
|
@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "flags.h"
|
||||
#include "intl.h"
|
||||
#include "opts.h"
|
||||
#include "toplev.h" /* For save_decoded_options. */
|
||||
#include "options.h"
|
||||
#include "params.h"
|
||||
#include "tree-inline.h"
|
||||
@ -966,3 +967,79 @@ gfc_handle_option (size_t scode, const char *arg, int value,
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* Return a string with the options passed to the compiler; used for
|
||||
Fortran's compiler_options() intrinsic. */
|
||||
|
||||
char *
|
||||
gfc_get_option_string (void)
|
||||
{
|
||||
unsigned j;
|
||||
size_t len, pos;
|
||||
char *result;
|
||||
|
||||
/* Determine required string length. */
|
||||
|
||||
len = 0;
|
||||
for (j = 1; j < save_decoded_options_count; j++)
|
||||
{
|
||||
switch (save_decoded_options[j].opt_index)
|
||||
{
|
||||
case OPT_o:
|
||||
case OPT_d:
|
||||
case OPT_dumpbase:
|
||||
case OPT_dumpdir:
|
||||
case OPT_auxbase:
|
||||
case OPT_quiet:
|
||||
case OPT_version:
|
||||
case OPT_fintrinsic_modules_path:
|
||||
/* Ignore these. */
|
||||
break;
|
||||
default:
|
||||
/* Ignore file names. */
|
||||
if (save_decoded_options[j].orig_option_with_args_text[0] == '-')
|
||||
len += 1
|
||||
+ strlen (save_decoded_options[j].orig_option_with_args_text);
|
||||
}
|
||||
}
|
||||
|
||||
result = (char *) gfc_getmem (len);
|
||||
|
||||
pos = 0;
|
||||
for (j = 1; j < save_decoded_options_count; j++)
|
||||
{
|
||||
switch (save_decoded_options[j].opt_index)
|
||||
{
|
||||
case OPT_o:
|
||||
case OPT_d:
|
||||
case OPT_dumpbase:
|
||||
case OPT_dumpdir:
|
||||
case OPT_auxbase:
|
||||
case OPT_quiet:
|
||||
case OPT_version:
|
||||
case OPT_fintrinsic_modules_path:
|
||||
/* Ignore these. */
|
||||
continue;
|
||||
|
||||
case OPT_cpp_:
|
||||
/* Use "-cpp" rather than "-cpp=<temporary file>". */
|
||||
len = 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Ignore file names. */
|
||||
if (save_decoded_options[j].orig_option_with_args_text[0] != '-')
|
||||
continue;
|
||||
|
||||
len = strlen (save_decoded_options[j].orig_option_with_args_text);
|
||||
}
|
||||
|
||||
memcpy (&result[pos], save_decoded_options[j].orig_option_with_args_text, len);
|
||||
pos += len;
|
||||
result[pos++] = ' ';
|
||||
}
|
||||
|
||||
result[--pos] = '\0';
|
||||
return result;
|
||||
}
|
||||
|
@ -6739,16 +6739,26 @@ gfc_convert_char_constant (gfc_expr *e, bt type ATTRIBUTE_UNUSED, int kind)
|
||||
gfc_expr *
|
||||
gfc_simplify_compiler_options (void)
|
||||
{
|
||||
/* FIXME: PR40569 - return the proper compiler arguments. */
|
||||
return gfc_get_character_expr (gfc_default_character_kind,
|
||||
&gfc_current_locus, "", 0);
|
||||
char *str;
|
||||
gfc_expr *result;
|
||||
|
||||
str = gfc_get_option_string ();
|
||||
result = gfc_get_character_expr (gfc_default_character_kind,
|
||||
&gfc_current_locus, str, strlen (str));
|
||||
gfc_free (str);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
gfc_expr *
|
||||
gfc_simplify_compiler_version (void)
|
||||
{
|
||||
char *buffer;
|
||||
size_t len;
|
||||
|
||||
len = strlen ("GCC version ") + strlen (version_string) + 1;
|
||||
buffer = (char*) alloca (len);
|
||||
snprintf (buffer, len, "GCC version %s", version_string);
|
||||
return gfc_get_character_expr (gfc_default_character_kind,
|
||||
&gfc_current_locus, version_string,
|
||||
strlen (version_string));
|
||||
&gfc_current_locus, buffer, len);
|
||||
}
|
||||
|
@ -127,8 +127,8 @@ static bool no_backend;
|
||||
#define MAX_LINE 75
|
||||
|
||||
/* Decoded options, and number of such options. */
|
||||
static struct cl_decoded_option *save_decoded_options;
|
||||
static unsigned int save_decoded_options_count;
|
||||
struct cl_decoded_option *save_decoded_options;
|
||||
unsigned int save_decoded_options_count;
|
||||
|
||||
/* Name of top-level original source file (what was input to cpp).
|
||||
This comes from the #-command at the beginning of the actual input.
|
||||
|
@ -29,6 +29,10 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define skip_leading_substring(whole, part) \
|
||||
(strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part))
|
||||
|
||||
/* Decoded options, and number of such options. */
|
||||
extern struct cl_decoded_option *save_decoded_options;
|
||||
extern unsigned int save_decoded_options_count;
|
||||
|
||||
extern int toplev_main (int, char **);
|
||||
extern void strip_off_ending (char *, int);
|
||||
extern void rest_of_decl_compilation (tree, int, int);
|
||||
|
Loading…
x
Reference in New Issue
Block a user