diff options
author | Janne Blomqvist <jb@gcc.gnu.org> | 2019-05-12 11:26:18 +0300 |
---|---|---|
committer | Janne Blomqvist <jb@gcc.gnu.org> | 2019-05-12 11:26:18 +0300 |
commit | 4c0164573e213045052ca6bc3113d7d63cf62816 (patch) | |
tree | 99ca3a0763fbd7cf9794ed6e1f3e21c43d3e7968 /gcc/fortran/parse.c | |
parent | 1fa26ccd67ea2b458f4fb9ba8779c11059353d0f (diff) | |
download | gcc-4c0164573e213045052ca6bc3113d7d63cf62816.zip gcc-4c0164573e213045052ca6bc3113d7d63cf62816.tar.gz gcc-4c0164573e213045052ca6bc3113d7d63cf62816.tar.bz2 |
fortran: C++ support for generating C prototypes
When generating C prototypes for Fortran procedures with the
-fc-prototypes and -fc-prototypes-external options, print a snippet
defining macros for complex types, and add C++ support by suppressing
mangling.
fortran/ChangeLog:
2019-05-12 Janne Blomqvist <jb@gcc.gnu.org>
* dump-parse-tree.c (get_c_type_name): Use macros for complex type
names.
* parse.c (gfc_parse_file): Define complex macros, add CPP support
when printing C prototypes.
From-SVN: r271106
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 9d69359..155534c 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -6331,6 +6331,24 @@ done: } /* Dump C prototypes. */ + if (flag_c_prototypes || flag_c_prototypes_external) + { + fprintf (stdout, + _("#include <stddef.h>\n" + "#ifdef __cplusplus\n" + "#include <complex>\n" + "#define __GFORTRAN_FLOAT_COMPLEX std::complex<float>\n" + "#define __GFORTRAN_DOUBLE_COMPLEX std::complex<double>\n" + "#define __GFORTRAN_LONG_DOUBLE_COMPLEX std::complex<long double>\n" + "extern \"C\" {\n" + "#else\n" + "#define __GFORTRAN_FLOAT_COMPLEX float _Complex\n" + "#define __GFORTRAN_DOUBLE_COMPLEX double _Complex\n" + "#define __GFORTRAN_LONG_DOUBLE_COMPLEX long double _Complex\n" + "#endif\n\n")); + } + + /* First dump BIND(C) prototypes. */ if (flag_c_prototypes) { for (gfc_current_ns = gfc_global_ns_list; gfc_current_ns; @@ -6342,6 +6360,10 @@ done: if (flag_c_prototypes_external) gfc_dump_external_c_prototypes (stdout); + if (flag_c_prototypes || flag_c_prototypes_external) + fprintf (stdout, + _("\n#ifdef __cplusplus\n}\n#endif\n")); + /* Do the translation. */ translate_all_program_units (gfc_global_ns_list); |