Skip to content

Commit dbbf2e5

Browse files
committed
Porting Flang driver changes to release_70
1 parent 658c2f1 commit dbbf2e5

File tree

22 files changed

+1462
-25
lines changed

22 files changed

+1462
-25
lines changed

include/clang/Basic/DiagnosticDriverKinds.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ def err_drv_invalid_pgo_instrumentor : Error<
5050
"invalid PGO instrumentor in argument '%0'">;
5151
def err_drv_invalid_rtlib_name : Error<
5252
"invalid runtime library name in argument '%0'">;
53+
def err_drv_invalid_allocatable_mode : Error<
54+
"invalid semantic mode for assignments to allocatables in argument '%0'">;
55+
def err_drv_unsupported_fixed_line_length : Error<
56+
"unsupported fixed-format line length in argument '%0'">;
5357
def err_drv_unsupported_rtlib_for_platform : Error<
5458
"unsupported runtime library '%0' for platform '%1'">;
5559
def err_drv_invalid_stdlib_name : Error<

include/clang/Driver/Action.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class Action {
6262
AnalyzeJobClass,
6363
MigrateJobClass,
6464
CompileJobClass,
65+
FortranFrontendJobClass,
6566
BackendJobClass,
6667
AssembleJobClass,
6768
LinkJobClass,
@@ -428,6 +429,16 @@ class MigrateJobAction : public JobAction {
428429
}
429430
};
430431

432+
class FortranFrontendJobAction : public JobAction {
433+
void anchor() override;
434+
public:
435+
FortranFrontendJobAction(Action *Input, types::ID OutputType);
436+
437+
static bool classof(const Action *A) {
438+
return A->getKind() == FortranFrontendJobClass;
439+
}
440+
};
441+
431442
class CompileJobAction : public JobAction {
432443
void anchor() override;
433444

include/clang/Driver/Driver.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ class Driver {
6767
GCCMode,
6868
GXXMode,
6969
CPPMode,
70-
CLMode
70+
CLMode,
71+
FortranMode
7172
} Mode;
7273

7374
enum SaveTempsMode {
@@ -182,6 +183,9 @@ class Driver {
182183
/// Whether the driver should follow cl.exe like behavior.
183184
bool IsCLMode() const { return Mode == CLMode; }
184185

186+
/// Whether the driver should follow gfortran like behavior.
187+
bool IsFortranMode() const { return Mode == FortranMode; }
188+
185189
/// Only print tool bindings, don't build any jobs.
186190
unsigned CCCPrintBindings : 1;
187191

include/clang/Driver/Options.td

Lines changed: 147 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ class InternalDriverOpt : Group<internal_driver_Group>,
251251
Flags<[DriverOption, HelpHidden]>;
252252
def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
253253
Flags<[CoreOption, DriverOption, HelpHidden]>,
254-
HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl'">;
254+
HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', 'cl', or 'fortran'">;
255255
def rsp_quoting : Joined<["--"], "rsp-quoting=">, Group<internal_driver_Group>,
256256
Flags<[CoreOption, DriverOption, HelpHidden]>,
257257
HelpText<"Set the rsp quoting to either 'posix', or 'windows'">;
@@ -2934,19 +2934,28 @@ defm devirtualize : BooleanFFlag<"devirtualize">, Group<clang_ignored_gcc_optimi
29342934
defm devirtualize_speculatively : BooleanFFlag<"devirtualize-speculatively">,
29352935
Group<clang_ignored_gcc_optimization_f_Group>;
29362936

2937+
// gfortran options that we recognize in the driver and pass along when
2938+
// invoking GCC to compile Fortran code.
2939+
def flang_rt_Group : OptionGroup<"Flang runtime library Group">;
2940+
def pgi_fortran_Group : OptionGroup<"PGI Fortran compatibility Group">,
2941+
Flags<[HelpHidden]>;
2942+
29372943
// Generic gfortran options.
29382944
def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;
29392945
def J : JoinedOrSeparate<["-"], "J">, Flags<[RenderJoined]>, Group<gfortran_Group>;
2940-
def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>;
2941-
def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>;
2946+
def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>,
2947+
HelpText<"Preprocess Fortran files">;
2948+
def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>,
2949+
HelpText<"Don't preprocess Fortran files">;
29422950
def static_libgfortran : Flag<["-"], "static-libgfortran">, Group<gfortran_Group>;
29432951

29442952
// "f" options with values for gfortran.
29452953
def fblas_matmul_limit_EQ : Joined<["-"], "fblas-matmul-limit=">, Group<gfortran_Group>;
29462954
def fcheck_EQ : Joined<["-"], "fcheck=">, Group<gfortran_Group>;
29472955
def fcoarray_EQ : Joined<["-"], "fcoarray=">, Group<gfortran_Group>;
29482956
def fconvert_EQ : Joined<["-"], "fconvert=">, Group<gfortran_Group>;
2949-
def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>;
2957+
def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>,
2958+
HelpText<"Set line length in fixed-form format Fortran, current supporting only 72 and 132 characters">;
29502959
def ffpe_trap_EQ : Joined<["-"], "ffpe-trap=">, Group<gfortran_Group>;
29512960
def ffree_line_length_VALUE : Joined<["-"], "ffree-line-length-">, Group<gfortran_Group>;
29522961
def finit_character_EQ : Joined<["-"], "finit-character=">, Group<gfortran_Group>;
@@ -2959,30 +2968,45 @@ def fmax_stack_var_size_EQ : Joined<["-"], "fmax-stack-var-size=">, Group<gfortr
29592968
def fmax_subrecord_length_EQ : Joined<["-"], "fmax-subrecord-length=">, Group<gfortran_Group>;
29602969
def frecord_marker_EQ : Joined<["-"], "frecord-marker=">, Group<gfortran_Group>;
29612970

2971+
// Define a group for Fortran source format
2972+
def fortran_format_Group : OptionGroup<"Fortran format Group">, Group<gfortran_Group>;
29622973
// "f" flags for gfortran.
29632974
defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
29642975
defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
29652976
defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
29662977
defm automatic : BooleanFFlag<"automatic">, Group<gfortran_Group>;
2967-
defm backslash : BooleanFFlag<"backslash">, Group<gfortran_Group>;
2978+
def fbackslash: Flag<["-"], "fbackslash">, Group<gfortran_Group>,
2979+
HelpText<"Treat backslash as C-style escape character">;
2980+
def fnobackslash: Flag<["-"], "fno-backslash">, Group<gfortran_Group>,
2981+
HelpText<"Treat backslash like any other character in character strings">;
29682982
defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
29692983
defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
29702984
defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>;
29712985
defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
29722986
defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
29732987
defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
29742988
defm default_double_8 : BooleanFFlag<"default-double-8">, Group<gfortran_Group>;
2975-
defm default_integer_8 : BooleanFFlag<"default-integer-8">, Group<gfortran_Group>;
2976-
defm default_real_8 : BooleanFFlag<"default-real-8">, Group<gfortran_Group>;
2989+
def default_integer_8_f : Flag<["-"], "fdefault-integer-8">, Group<gfortran_Group>,
2990+
HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
2991+
def default_integer_8_fno : Flag<["-"], "fno-default-integer-8">, Group<gfortran_Group>;
2992+
def default_real_8_f : Flag<["-"], "fdefault-real-8">, Group<gfortran_Group>,
2993+
HelpText<"Treat REAL as REAL*8">;
2994+
def default_real_8_fno : Flag<["-"], "fno-default-real-8">, Group<gfortran_Group>;
29772995
defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
29782996
defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
29792997
defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
29802998
defm dump_parse_tree : BooleanFFlag<"dump-parse-tree">, Group<gfortran_Group>;
29812999
defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
29823000
defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
2983-
defm fixed_form : BooleanFFlag<"fixed-form">, Group<gfortran_Group>;
2984-
defm free_form : BooleanFFlag<"free-form">, Group<gfortran_Group>;
2985-
defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
3001+
def fixed_form_on : Flag<["-"], "ffixed-form">, Group<fortran_format_Group>,
3002+
HelpText<"Enable fixed-form format for Fortran">;
3003+
def fixed_form_off : Flag<["-"], "fno-fixed-form">, Group<fortran_format_Group>,
3004+
HelpText<"Disable fixed-form format for Fortran">;
3005+
def free_form_on : Flag<["-"], "ffree-form">, Group<fortran_format_Group>,
3006+
HelpText<"Enable free-form format for Fortran">;
3007+
def free_form_off : Flag<["-"], "fno-free-form">, Group<fortran_format_Group>,
3008+
HelpText<"Disable free-form format for Fortran">;
3009+
defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<fortran_format_Group>;
29863010
defm implicit_none : BooleanFFlag<"implicit-none">, Group<gfortran_Group>;
29873011
defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
29883012
defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
@@ -3007,6 +3031,119 @@ defm stack_arrays : BooleanFFlag<"stack-arrays">, Group<gfortran_Group>;
30073031
defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
30083032
defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
30093033

3034+
// Flang-specific options
3035+
multiclass BooleanKFlag<string name> {
3036+
def _on : Flag<["-"], "K"#name>;
3037+
def _off : Flag<["-"], "Kno"#name>;
3038+
}
3039+
3040+
multiclass BooleanMFlag<string name> {
3041+
def _on : Flag<["-"], "M"#name>;
3042+
def _off : Flag<["-"], "Mno"#name>;
3043+
}
3044+
3045+
def Mfixed : Flag<["-"], "Mfixed">, Group<fortran_format_Group>,
3046+
HelpText<"Force fixed-form format Fortran">,
3047+
Flags<[HelpHidden]>;
3048+
def Mfree_on: Flag<["-"], "Mfree">, Group<fortran_format_Group>,
3049+
HelpText<"Enable free-form format for Fortran">,
3050+
Flags<[HelpHidden]>;
3051+
def Mfree_off: Flag<["-"], "Mnofree">, Group<fortran_format_Group>,
3052+
HelpText<"Disable free-form format for Fortran">,
3053+
Flags<[HelpHidden]>;
3054+
def Mfreeform_on: Flag<["-"], "Mfreeform">, Group<fortran_format_Group>,
3055+
HelpText<"Enable free-form format for Fortran">,
3056+
Flags<[HelpHidden]>;
3057+
def Mfreeform_off: Flag<["-"], "Mnofreeform">, Group<fortran_format_Group>,
3058+
HelpText<"Disable free-form format for Fortran">,
3059+
Flags<[HelpHidden]>;
3060+
3061+
def Mipa: Joined<["-"], "Mipa">, Group<pgi_fortran_Group>;
3062+
def Mstackarrays: Joined<["-"], "Mstack_arrays">, Group<pgi_fortran_Group>;
3063+
def pc: JoinedOrSeparate<["-"], "pc">, Group<pgi_fortran_Group>;
3064+
def Mfprelaxed: Joined<["-"], "Mfprelaxed">, Group<pgi_fortran_Group>;
3065+
def Mnofprelaxed: Joined<["-"], "Mnofprelaxed">, Group<pgi_fortran_Group>;
3066+
defm Mstride0: BooleanMFlag<"stride0">, Group<pgi_fortran_Group>;
3067+
defm Mrecursive: BooleanMFlag<"recursive">, Group<pgi_fortran_Group>;
3068+
defm Mreentrant: BooleanMFlag<"reentrant">, Group<pgi_fortran_Group>;
3069+
defm Mbounds: BooleanMFlag<"bounds">, Group<pgi_fortran_Group>;
3070+
def Mdaz_on: Flag<["-"], "Mdaz">, Group<pgi_fortran_Group>,
3071+
HelpText<"Treat denormalized numbers as zero">;
3072+
def Mdaz_off: Flag<["-"], "Mnodaz">, Group<pgi_fortran_Group>,
3073+
HelpText<"Disable treating denormalized numbers as zero">;
3074+
def Kieee_on : Flag<["-"], "Kieee">, Group<pgi_fortran_Group>,
3075+
HelpText<"Enable IEEE division">;
3076+
def Kieee_off : Flag<["-"], "Knoieee">, Group<pgi_fortran_Group>,
3077+
HelpText<"Disable IEEE division">;
3078+
def Mextend : Flag<["-"], "Mextend">, Group<pgi_fortran_Group>,
3079+
HelpText<"Allow lines up to 132 characters in Fortran sources">;
3080+
def Mpreprocess : Flag<["-"], "Mpreprocess">, Group<pgi_fortran_Group>,
3081+
HelpText<"Preprocess Fortran files">;
3082+
def Mstandard: Flag<["-"], "Mstandard">, Group<pgi_fortran_Group>,
3083+
HelpText<"Check Fortran standard conformance">;
3084+
def Mchkptr: Flag<["-"], "Mchkptr">, Group<pgi_fortran_Group>;
3085+
defm Minline: BooleanMFlag<"inline">, Group<pgi_fortran_Group>;
3086+
def fma: Flag<["-"], "fma">, Group<pgi_fortran_Group>,
3087+
HelpText<"Enable generation of FMA instructions">;
3088+
def nofma: Flag<["-"], "nofma">, Group<pgi_fortran_Group>,
3089+
HelpText<"Disable generation of FMA instructions">;
3090+
defm Mfma: BooleanMFlag<"fma">, Group<pgi_fortran_Group>,
3091+
HelpText<"Enable generation of FMA instructions">;
3092+
def mp: Flag<["-"], "mp">, Group<pgi_fortran_Group>,
3093+
HelpText<"Enable OpenMP">;
3094+
def nomp: Flag<["-"], "nomp">, Group<pgi_fortran_Group>,
3095+
HelpText<"Do not link with OpenMP library libomp">;
3096+
def Mflushz_on: Flag<["-"], "Mflushz">, Group<pgi_fortran_Group>,
3097+
HelpText<"Set SSE to flush-to-zero mode">;
3098+
def Mflushz_off: Flag<["-"], "Mnoflushz">, Group<pgi_fortran_Group>,
3099+
HelpText<"Disabling setting SSE to flush-to-zero mode">;
3100+
def Msave_on: Flag<["-"], "Msave">, Group<pgi_fortran_Group>,
3101+
HelpText<"Assume all Fortran variables have SAVE attribute">;
3102+
def Msave_off: Flag<["-"], "Mnosave">, Group<pgi_fortran_Group>,
3103+
HelpText<"Assume no Fortran variables have SAVE attribute">;
3104+
def Mcache_align_on: Flag<["-"], "Mcache_align">, Group<pgi_fortran_Group>,
3105+
HelpText<"Align large objects on cache-line boundaries">;
3106+
def Mcache_align_off: Flag<["-"], "Mnocache_align">, Group<pgi_fortran_Group>,
3107+
HelpText<"Disable aligning large objects on cache-line boundaries">;
3108+
def ModuleDir : Separate<["-"], "module">, Group<pgi_fortran_Group>,
3109+
HelpText<"Fortran module path">;
3110+
def Minform_EQ : Joined<["-"], "Minform=">,
3111+
HelpText<"Set error level of messages to display">;
3112+
def Mallocatable_EQ : Joined<["-"], "Mallocatable=">,
3113+
HelpText<"Select semantics for assignments to allocatables (F03 or F95)">;
3114+
def Mbyteswapio: Flag<["-"], "Mbyteswapio">, Group<pgi_fortran_Group>,
3115+
HelpText<"Swap byte-order for unformatted input/output">;
3116+
def byteswapio: Flag<["-"], "byteswapio">, Group<gfortran_Group>,
3117+
HelpText<"Swap byte-order for unformatted input/output">;
3118+
def Mbackslash: Flag<["-"], "Mbackslash">, Group<pgi_fortran_Group>,
3119+
HelpText<"Treat backslash like any other character in character strings">;
3120+
def Mnobackslash: Flag<["-"], "Mnobackslash">, Group<pgi_fortran_Group>,
3121+
HelpText<"Treat backslash as C-style escape character">;
3122+
def staticFlangLibs: Flag<["-"], "static-flang-libs">, Group<flang_rt_Group>,
3123+
HelpText<"Link using static Flang libraries">;
3124+
def noFlangLibs: Flag<["-"], "no-flang-libs">, Group<flang_rt_Group>,
3125+
HelpText<"Do not link against Flang libraries">;
3126+
def r8: Flag<["-"], "r8">, Group<pgi_fortran_Group>,
3127+
HelpText<"Treat REAL as REAL*8">;
3128+
def i8: Flag<["-"], "i8">, Group<pgi_fortran_Group>,
3129+
HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
3130+
def no_fortran_main: Flag<["-"], "fno-fortran-main">, Group<gfortran_Group>,
3131+
HelpText<"Don't link in Fortran main">;
3132+
def Mnomain: Flag<["-"], "Mnomain">, Group<pgi_fortran_Group>,
3133+
HelpText<"Don't link in Fortran main">;
3134+
3135+
// Flang internal debug options
3136+
def Mx_EQ : Joined<["-"], "Mx,">, Group<pgi_fortran_Group>;
3137+
def My_EQ : Joined<["-"], "My,">, Group<pgi_fortran_Group>;
3138+
def Hx_EQ : Joined<["-"], "Hx,">, Group<pgi_fortran_Group>;
3139+
def Hy_EQ : Joined<["-"], "Hy,">, Group<pgi_fortran_Group>;
3140+
def Wm_EQ : Joined<["-"], "Wm,">, Group<pgi_fortran_Group>;
3141+
3142+
def Mq_EQ : Joined<["-"], "Mq,">, Group<pgi_fortran_Group>;
3143+
def Hq_EQ : Joined<["-"], "Hq,">, Group<pgi_fortran_Group>;
3144+
def Mqq_EQ : Joined<["-"], "Mqq,">, Group<pgi_fortran_Group>;
3145+
def Hqq_EQ : Joined<["-"], "Hqq,">, Group<pgi_fortran_Group>;
3146+
def Wh_EQ : Joined<["-"], "Wh,">, Group<pgi_fortran_Group>;
30103147

30113148
include "CC1Options.td"
30123149

include/clang/Driver/Phases.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace phases {
1818
enum ID {
1919
Preprocess,
2020
Precompile,
21+
FortranFrontend,
2122
Compile,
2223
Backend,
2324
Assemble,

include/clang/Driver/ToolChain.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,14 @@ class ToolChain {
122122
/// The list of toolchain specific path prefixes to search for programs.
123123
path_list ProgramPaths;
124124

125+
mutable std::unique_ptr<Tool> FlangFrontend;
125126
mutable std::unique_ptr<Tool> Clang;
126127
mutable std::unique_ptr<Tool> Assemble;
127128
mutable std::unique_ptr<Tool> Link;
128129
mutable std::unique_ptr<Tool> OffloadBundler;
129130

130131
Tool *getClang() const;
132+
Tool *getFlangFrontend() const;
131133
Tool *getAssemble() const;
132134
Tool *getLink() const;
133135
Tool *getClangAs() const;
@@ -467,6 +469,14 @@ class ToolChain {
467469
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
468470
llvm::opt::ArgStringList &CC1Args) const;
469471

472+
/// \brief Add the flang arguments for system include paths.
473+
///
474+
/// This routine is responsible for adding the -stdinc argument to
475+
/// include headers and module files from standard system header directories.
476+
virtual void
477+
AddFlangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
478+
llvm::opt::ArgStringList &Flang1Args) const { }
479+
470480
/// Add options that need to be passed to cc1 for this target.
471481
virtual void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
472482
llvm::opt::ArgStringList &CC1Args,
@@ -532,6 +542,11 @@ class ToolChain {
532542
virtual VersionTuple computeMSVCVersion(const Driver *D,
533543
const llvm::opt::ArgList &Args) const;
534544

545+
/// AddFortranStdlibLibArgs - Add the system specific linker arguments to use
546+
/// for the given Fortran runtime library type.
547+
virtual void AddFortranStdlibLibArgs(const llvm::opt::ArgList &Args,
548+
llvm::opt::ArgStringList &CmdArgs) const;
549+
535550
/// Return sanitizers which are available in this toolchain.
536551
virtual SanitizerMask getSupportedSanitizers() const;
537552

include/clang/Driver/Types.def

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,16 @@ TYPE("objective-c++-header", ObjCXXHeader, PP_ObjCXXHeader, "h", "pu")
7272
TYPE("c++-module", CXXModule, PP_CXXModule, "cppm", "mu")
7373
TYPE("c++-module-cpp-output", PP_CXXModule, INVALID, "iim", "m")
7474

75+
// Fortran
76+
TYPE("f77", PP_F_FixedForm, INVALID, "f", "u")
77+
TYPE("f77-cpp-input", F_FixedForm, PP_F_FixedForm, "F", "u")
78+
TYPE("f95", PP_F_FreeForm, INVALID, "f95", "u")
79+
TYPE("f95-cpp-input", F_FreeForm, PP_F_FreeForm, "F95", "u")
80+
7581
// Other languages.
7682
TYPE("ada", Ada, INVALID, nullptr, "u")
7783
TYPE("assembler", PP_Asm, INVALID, "s", "au")
7884
TYPE("assembler-with-cpp", Asm, PP_Asm, "S", "au")
79-
TYPE("f95", PP_Fortran, INVALID, nullptr, "u")
80-
TYPE("f95-cpp-input", Fortran, PP_Fortran, nullptr, "u")
8185
TYPE("java", Java, INVALID, nullptr, "u")
8286

8387
// LLVM IR/LTO types. We define separate types for IR and LTO because LTO

include/clang/Driver/Types.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,15 @@ namespace types {
110110
/// source file type (used for clang-cl emulation of \Yc).
111111
ID lookupHeaderTypeForSourceType(ID Id);
112112

113+
/// isFortran -- is it a Fortran input
114+
bool isFortran(ID Id);
115+
116+
/// isFreeFormFortran -- is it a free form layout Fortran input
117+
bool isFreeFormFortran(ID Id);
118+
119+
/// isFixedFormFortran -- is it a fixed form layout Fortran input
120+
bool isFixedFormFortran(ID Id);
121+
113122
} // end namespace types
114123
} // end namespace driver
115124
} // end namespace clang

lib/Driver/Action.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const char *Action::getClassName(ActionClass AC) {
2828
case PrecompileJobClass: return "precompiler";
2929
case AnalyzeJobClass: return "analyzer";
3030
case MigrateJobClass: return "migrator";
31+
case FortranFrontendJobClass: return "fortran-frontend";
3132
case CompileJobClass: return "compiler";
3233
case BackendJobClass: return "backend";
3334
case AssembleJobClass: return "assembler";
@@ -329,6 +330,12 @@ void MigrateJobAction::anchor() {}
329330
MigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
330331
: JobAction(MigrateJobClass, Input, OutputType) {}
331332

333+
void FortranFrontendJobAction::anchor() {}
334+
335+
FortranFrontendJobAction::FortranFrontendJobAction(Action *Input,
336+
types::ID OutputType)
337+
: JobAction(FortranFrontendJobClass, Input, OutputType) {}
338+
332339
void CompileJobAction::anchor() {}
333340

334341
CompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)

lib/Driver/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ add_clang_library(clangDriver
4141
ToolChains/Cuda.cpp
4242
ToolChains/Darwin.cpp
4343
ToolChains/DragonFly.cpp
44+
ToolChains/Flang.cpp
4445
ToolChains/FreeBSD.cpp
4546
ToolChains/Fuchsia.cpp
4647
ToolChains/Gnu.cpp

0 commit comments

Comments
 (0)