Skip to content

Commit ca2742d

Browse files
authored
Merge pull request #4 from schweitzpgi/release_50
[driver] Flang driver changes (release_50)
2 parents 9fc5dfc + cecb379 commit ca2742d

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
@@ -42,6 +42,10 @@ def err_drv_invalid_pgo_instrumentor : Error<
4242
"invalid PGO instrumentor in argument '%0'">;
4343
def err_drv_invalid_rtlib_name : Error<
4444
"invalid runtime library name in argument '%0'">;
45+
def err_drv_invalid_allocatable_mode : Error<
46+
"invalid semantic mode for assignments to allocatables in argument '%0'">;
47+
def err_drv_unsupported_fixed_line_length : Error<
48+
"unsupported fixed-format line length in argument '%0'">;
4549
def err_drv_unsupported_rtlib_for_platform : Error<
4650
"unsupported runtime library '%0' for platform '%1'">;
4751
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
@@ -59,6 +59,7 @@ class Action {
5959
AnalyzeJobClass,
6060
MigrateJobClass,
6161
CompileJobClass,
62+
FortranFrontendJobClass,
6263
BackendJobClass,
6364
AssembleJobClass,
6465
LinkJobClass,
@@ -400,6 +401,16 @@ class MigrateJobAction : public JobAction {
400401
}
401402
};
402403

404+
class FortranFrontendJobAction : public JobAction {
405+
void anchor() override;
406+
public:
407+
FortranFrontendJobAction(Action *Input, types::ID OutputType);
408+
409+
static bool classof(const Action *A) {
410+
return A->getKind() == FortranFrontendJobClass;
411+
}
412+
};
413+
403414
class CompileJobAction : public JobAction {
404415
void anchor() override;
405416
public:

include/clang/Driver/Driver.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ class Driver {
7373
GCCMode,
7474
GXXMode,
7575
CPPMode,
76-
CLMode
76+
CLMode,
77+
FortranMode
7778
} Mode;
7879

7980
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
@@ -243,7 +243,7 @@ class InternalDriverOpt : Group<internal_driver_Group>,
243243
Flags<[DriverOption, HelpHidden]>;
244244
def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
245245
Flags<[CoreOption, DriverOption, HelpHidden]>,
246-
HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl'">;
246+
HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', 'cl', or 'fortran'">;
247247
def rsp_quoting : Joined<["--"], "rsp-quoting=">, Group<internal_driver_Group>,
248248
Flags<[CoreOption, DriverOption, HelpHidden]>,
249249
HelpText<"Set the rsp quoting to either 'posix', or 'windows'">;
@@ -2550,19 +2550,28 @@ defm devirtualize : BooleanFFlag<"devirtualize">, Group<clang_ignored_gcc_optimi
25502550
defm devirtualize_speculatively : BooleanFFlag<"devirtualize-speculatively">,
25512551
Group<clang_ignored_gcc_optimization_f_Group>;
25522552

2553+
// gfortran options that we recognize in the driver and pass along when
2554+
// invoking GCC to compile Fortran code.
2555+
def flang_rt_Group : OptionGroup<"Flang runtime library Group">;
2556+
def pgi_fortran_Group : OptionGroup<"PGI Fortran compatibility Group">,
2557+
Flags<[HelpHidden]>;
2558+
25532559
// Generic gfortran options.
25542560
def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;
25552561
def J : JoinedOrSeparate<["-"], "J">, Flags<[RenderJoined]>, Group<gfortran_Group>;
2556-
def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>;
2557-
def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>;
2562+
def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>,
2563+
HelpText<"Preprocess Fortran files">;
2564+
def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>,
2565+
HelpText<"Don't preprocess Fortran files">;
25582566
def static_libgfortran : Flag<["-"], "static-libgfortran">, Group<gfortran_Group>;
25592567

25602568
// "f" options with values for gfortran.
25612569
def fblas_matmul_limit_EQ : Joined<["-"], "fblas-matmul-limit=">, Group<gfortran_Group>;
25622570
def fcheck_EQ : Joined<["-"], "fcheck=">, Group<gfortran_Group>;
25632571
def fcoarray_EQ : Joined<["-"], "fcoarray=">, Group<gfortran_Group>;
25642572
def fconvert_EQ : Joined<["-"], "fconvert=">, Group<gfortran_Group>;
2565-
def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>;
2573+
def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>,
2574+
HelpText<"Set line length in fixed-form format Fortran, current supporting only 72 and 132 characters">;
25662575
def ffpe_trap_EQ : Joined<["-"], "ffpe-trap=">, Group<gfortran_Group>;
25672576
def ffree_line_length_VALUE : Joined<["-"], "ffree-line-length-">, Group<gfortran_Group>;
25682577
def finit_character_EQ : Joined<["-"], "finit-character=">, Group<gfortran_Group>;
@@ -2575,30 +2584,45 @@ def fmax_stack_var_size_EQ : Joined<["-"], "fmax-stack-var-size=">, Group<gfortr
25752584
def fmax_subrecord_length_EQ : Joined<["-"], "fmax-subrecord-length=">, Group<gfortran_Group>;
25762585
def frecord_marker_EQ : Joined<["-"], "frecord-marker=">, Group<gfortran_Group>;
25772586

2587+
// Define a group for Fortran source format
2588+
def fortran_format_Group : OptionGroup<"Fortran format Group">, Group<gfortran_Group>;
25782589
// "f" flags for gfortran.
25792590
defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
25802591
defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
25812592
defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
25822593
defm automatic : BooleanFFlag<"automatic">, Group<gfortran_Group>;
2583-
defm backslash : BooleanFFlag<"backslash">, Group<gfortran_Group>;
2594+
def fbackslash: Flag<["-"], "fbackslash">, Group<gfortran_Group>,
2595+
HelpText<"Treat backslash as C-style escape character">;
2596+
def fnobackslash: Flag<["-"], "fno-backslash">, Group<gfortran_Group>,
2597+
HelpText<"Treat backslash like any other character in character strings">;
25842598
defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
25852599
defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
25862600
defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>;
25872601
defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
25882602
defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
25892603
defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
25902604
defm default_double_8 : BooleanFFlag<"default-double-8">, Group<gfortran_Group>;
2591-
defm default_integer_8 : BooleanFFlag<"default-integer-8">, Group<gfortran_Group>;
2592-
defm default_real_8 : BooleanFFlag<"default-real-8">, Group<gfortran_Group>;
2605+
def default_integer_8_f : Flag<["-"], "fdefault-integer-8">, Group<gfortran_Group>,
2606+
HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
2607+
def default_integer_8_fno : Flag<["-"], "fno-default-integer-8">, Group<gfortran_Group>;
2608+
def default_real_8_f : Flag<["-"], "fdefault-real-8">, Group<gfortran_Group>,
2609+
HelpText<"Treat REAL as REAL*8">;
2610+
def default_real_8_fno : Flag<["-"], "fno-default-real-8">, Group<gfortran_Group>;
25932611
defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
25942612
defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
25952613
defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
25962614
defm dump_parse_tree : BooleanFFlag<"dump-parse-tree">, Group<gfortran_Group>;
25972615
defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
25982616
defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
2599-
defm fixed_form : BooleanFFlag<"fixed-form">, Group<gfortran_Group>;
2600-
defm free_form : BooleanFFlag<"free-form">, Group<gfortran_Group>;
2601-
defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
2617+
def fixed_form_on : Flag<["-"], "ffixed-form">, Group<fortran_format_Group>,
2618+
HelpText<"Enable fixed-form format for Fortran">;
2619+
def fixed_form_off : Flag<["-"], "fno-fixed-form">, Group<fortran_format_Group>,
2620+
HelpText<"Disable fixed-form format for Fortran">;
2621+
def free_form_on : Flag<["-"], "ffree-form">, Group<fortran_format_Group>,
2622+
HelpText<"Enable free-form format for Fortran">;
2623+
def free_form_off : Flag<["-"], "fno-free-form">, Group<fortran_format_Group>,
2624+
HelpText<"Disable free-form format for Fortran">;
2625+
defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<fortran_format_Group>;
26022626
defm implicit_none : BooleanFFlag<"implicit-none">, Group<gfortran_Group>;
26032627
defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
26042628
defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
@@ -2623,6 +2647,119 @@ defm stack_arrays : BooleanFFlag<"stack-arrays">, Group<gfortran_Group>;
26232647
defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
26242648
defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
26252649

2650+
// Flang-specific options
2651+
multiclass BooleanKFlag<string name> {
2652+
def _on : Flag<["-"], "K"#name>;
2653+
def _off : Flag<["-"], "Kno"#name>;
2654+
}
2655+
2656+
multiclass BooleanMFlag<string name> {
2657+
def _on : Flag<["-"], "M"#name>;
2658+
def _off : Flag<["-"], "Mno"#name>;
2659+
}
2660+
2661+
def Mfixed : Flag<["-"], "Mfixed">, Group<fortran_format_Group>,
2662+
HelpText<"Force fixed-form format Fortran">,
2663+
Flags<[HelpHidden]>;
2664+
def Mfree_on: Flag<["-"], "Mfree">, Group<fortran_format_Group>,
2665+
HelpText<"Enable free-form format for Fortran">,
2666+
Flags<[HelpHidden]>;
2667+
def Mfree_off: Flag<["-"], "Mnofree">, Group<fortran_format_Group>,
2668+
HelpText<"Disable free-form format for Fortran">,
2669+
Flags<[HelpHidden]>;
2670+
def Mfreeform_on: Flag<["-"], "Mfreeform">, Group<fortran_format_Group>,
2671+
HelpText<"Enable free-form format for Fortran">,
2672+
Flags<[HelpHidden]>;
2673+
def Mfreeform_off: Flag<["-"], "Mnofreeform">, Group<fortran_format_Group>,
2674+
HelpText<"Disable free-form format for Fortran">,
2675+
Flags<[HelpHidden]>;
2676+
2677+
def Mipa: Joined<["-"], "Mipa">, Group<pgi_fortran_Group>;
2678+
def Mstackarrays: Joined<["-"], "Mstack_arrays">, Group<pgi_fortran_Group>;
2679+
def pc: JoinedOrSeparate<["-"], "pc">, Group<pgi_fortran_Group>;
2680+
def Mfprelaxed: Joined<["-"], "Mfprelaxed">, Group<pgi_fortran_Group>;
2681+
def Mnofprelaxed: Joined<["-"], "Mnofprelaxed">, Group<pgi_fortran_Group>;
2682+
defm Mstride0: BooleanMFlag<"stride0">, Group<pgi_fortran_Group>;
2683+
defm Mrecursive: BooleanMFlag<"recursive">, Group<pgi_fortran_Group>;
2684+
defm Mreentrant: BooleanMFlag<"reentrant">, Group<pgi_fortran_Group>;
2685+
defm Mbounds: BooleanMFlag<"bounds">, Group<pgi_fortran_Group>;
2686+
def Mdaz_on: Flag<["-"], "Mdaz">, Group<pgi_fortran_Group>,
2687+
HelpText<"Treat denormalized numbers as zero">;
2688+
def Mdaz_off: Flag<["-"], "Mnodaz">, Group<pgi_fortran_Group>,
2689+
HelpText<"Disable treating denormalized numbers as zero">;
2690+
def Kieee_on : Flag<["-"], "Kieee">, Group<pgi_fortran_Group>,
2691+
HelpText<"Enable IEEE division">;
2692+
def Kieee_off : Flag<["-"], "Knoieee">, Group<pgi_fortran_Group>,
2693+
HelpText<"Disable IEEE division">;
2694+
def Mextend : Flag<["-"], "Mextend">, Group<pgi_fortran_Group>,
2695+
HelpText<"Allow lines up to 132 characters in Fortran sources">;
2696+
def Mpreprocess : Flag<["-"], "Mpreprocess">, Group<pgi_fortran_Group>,
2697+
HelpText<"Preprocess Fortran files">;
2698+
def Mstandard: Flag<["-"], "Mstandard">, Group<pgi_fortran_Group>,
2699+
HelpText<"Check Fortran standard conformance">;
2700+
def Mchkptr: Flag<["-"], "Mchkptr">, Group<pgi_fortran_Group>;
2701+
defm Minline: BooleanMFlag<"inline">, Group<pgi_fortran_Group>;
2702+
def fma: Flag<["-"], "fma">, Group<pgi_fortran_Group>,
2703+
HelpText<"Enable generation of FMA instructions">;
2704+
def nofma: Flag<["-"], "nofma">, Group<pgi_fortran_Group>,
2705+
HelpText<"Disable generation of FMA instructions">;
2706+
defm Mfma: BooleanMFlag<"fma">, Group<pgi_fortran_Group>,
2707+
HelpText<"Enable generation of FMA instructions">;
2708+
def mp: Flag<["-"], "mp">, Group<pgi_fortran_Group>,
2709+
HelpText<"Enable OpenMP">;
2710+
def nomp: Flag<["-"], "nomp">, Group<pgi_fortran_Group>,
2711+
HelpText<"Do not link with OpenMP library libomp">;
2712+
def Mflushz_on: Flag<["-"], "Mflushz">, Group<pgi_fortran_Group>,
2713+
HelpText<"Set SSE to flush-to-zero mode">;
2714+
def Mflushz_off: Flag<["-"], "Mnoflushz">, Group<pgi_fortran_Group>,
2715+
HelpText<"Disabling setting SSE to flush-to-zero mode">;
2716+
def Msave_on: Flag<["-"], "Msave">, Group<pgi_fortran_Group>,
2717+
HelpText<"Assume all Fortran variables have SAVE attribute">;
2718+
def Msave_off: Flag<["-"], "Mnosave">, Group<pgi_fortran_Group>,
2719+
HelpText<"Assume no Fortran variables have SAVE attribute">;
2720+
def Mcache_align_on: Flag<["-"], "Mcache_align">, Group<pgi_fortran_Group>,
2721+
HelpText<"Align large objects on cache-line boundaries">;
2722+
def Mcache_align_off: Flag<["-"], "Mnocache_align">, Group<pgi_fortran_Group>,
2723+
HelpText<"Disable aligning large objects on cache-line boundaries">;
2724+
def ModuleDir : Separate<["-"], "module">, Group<pgi_fortran_Group>,
2725+
HelpText<"Fortran module path">;
2726+
def Minform_EQ : Joined<["-"], "Minform=">,
2727+
HelpText<"Set error level of messages to display">;
2728+
def Mallocatable_EQ : Joined<["-"], "Mallocatable=">,
2729+
HelpText<"Select semantics for assignments to allocatables (F03 or F95)">;
2730+
def Mbyteswapio: Flag<["-"], "Mbyteswapio">, Group<pgi_fortran_Group>,
2731+
HelpText<"Swap byte-order for unformatted input/output">;
2732+
def byteswapio: Flag<["-"], "byteswapio">, Group<gfortran_Group>,
2733+
HelpText<"Swap byte-order for unformatted input/output">;
2734+
def Mbackslash: Flag<["-"], "Mbackslash">, Group<pgi_fortran_Group>,
2735+
HelpText<"Treat backslash like any other character in character strings">;
2736+
def Mnobackslash: Flag<["-"], "Mnobackslash">, Group<pgi_fortran_Group>,
2737+
HelpText<"Treat backslash as C-style escape character">;
2738+
def staticFlangLibs: Flag<["-"], "static-flang-libs">, Group<flang_rt_Group>,
2739+
HelpText<"Link using static Flang libraries">;
2740+
def noFlangLibs: Flag<["-"], "no-flang-libs">, Group<flang_rt_Group>,
2741+
HelpText<"Do not link against Flang libraries">;
2742+
def r8: Flag<["-"], "r8">, Group<pgi_fortran_Group>,
2743+
HelpText<"Treat REAL as REAL*8">;
2744+
def i8: Flag<["-"], "i8">, Group<pgi_fortran_Group>,
2745+
HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
2746+
def no_fortran_main: Flag<["-"], "fno-fortran-main">, Group<gfortran_Group>,
2747+
HelpText<"Don't link in Fortran main">;
2748+
def Mnomain: Flag<["-"], "Mnomain">, Group<pgi_fortran_Group>,
2749+
HelpText<"Don't link in Fortran main">;
2750+
2751+
// Flang internal debug options
2752+
def Mx_EQ : Joined<["-"], "Mx,">, Group<pgi_fortran_Group>;
2753+
def My_EQ : Joined<["-"], "My,">, Group<pgi_fortran_Group>;
2754+
def Hx_EQ : Joined<["-"], "Hx,">, Group<pgi_fortran_Group>;
2755+
def Hy_EQ : Joined<["-"], "Hy,">, Group<pgi_fortran_Group>;
2756+
def Wm_EQ : Joined<["-"], "Wm,">, Group<pgi_fortran_Group>;
2757+
2758+
def Mq_EQ : Joined<["-"], "Mq,">, Group<pgi_fortran_Group>;
2759+
def Hq_EQ : Joined<["-"], "Hq,">, Group<pgi_fortran_Group>;
2760+
def Mqq_EQ : Joined<["-"], "Mqq,">, Group<pgi_fortran_Group>;
2761+
def Hqq_EQ : Joined<["-"], "Hqq,">, Group<pgi_fortran_Group>;
2762+
def Wh_EQ : Joined<["-"], "Wh,">, Group<pgi_fortran_Group>;
26262763

26272764
include "CC1Options.td"
26282765

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
@@ -84,11 +84,13 @@ class ToolChain {
8484
/// programs.
8585
path_list ProgramPaths;
8686

87+
mutable std::unique_ptr<Tool> FlangFrontend;
8788
mutable std::unique_ptr<Tool> Clang;
8889
mutable std::unique_ptr<Tool> Assemble;
8990
mutable std::unique_ptr<Tool> Link;
9091
mutable std::unique_ptr<Tool> OffloadBundler;
9192
Tool *getClang() const;
93+
Tool *getFlangFrontend() const;
9294
Tool *getAssemble() const;
9395
Tool *getLink() const;
9496
Tool *getClangAs() const;
@@ -409,6 +411,14 @@ class ToolChain {
409411
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
410412
llvm::opt::ArgStringList &CC1Args) const;
411413

414+
/// \brief Add the flang arguments for system include paths.
415+
///
416+
/// This routine is responsible for adding the -stdinc argument to
417+
/// include headers and module files from standard system header directories.
418+
virtual void
419+
AddFlangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
420+
llvm::opt::ArgStringList &Flang1Args) const { }
421+
412422
/// \brief Add options that need to be passed to cc1 for this target.
413423
virtual void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
414424
llvm::opt::ArgStringList &CC1Args,
@@ -469,6 +479,11 @@ class ToolChain {
469479
virtual VersionTuple computeMSVCVersion(const Driver *D,
470480
const llvm::opt::ArgList &Args) const;
471481

482+
/// AddFortranStdlibLibArgs - Add the system specific linker arguments to use
483+
/// for the given Fortran runtime library type.
484+
virtual void AddFortranStdlibLibArgs(const llvm::opt::ArgList &Args,
485+
llvm::opt::ArgStringList &CmdArgs) const;
486+
472487
/// \brief Return sanitizers which are available in this toolchain.
473488
virtual SanitizerMask getSupportedSanitizers() const;
474489

include/clang/Driver/Types.def

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

72+
// Fortran
73+
TYPE("f77", PP_F_FixedForm, INVALID, "f", "u")
74+
TYPE("f77-cpp-input", F_FixedForm, PP_F_FixedForm, "F", "u")
75+
TYPE("f95", PP_F_FreeForm, INVALID, "f95", "u")
76+
TYPE("f95-cpp-input", F_FreeForm, PP_F_FreeForm, "F95", "u")
77+
7278
// Other languages.
7379
TYPE("ada", Ada, INVALID, nullptr, "u")
7480
TYPE("assembler", PP_Asm, INVALID, "s", "au")
7581
TYPE("assembler-with-cpp", Asm, PP_Asm, "S", "au")
76-
TYPE("f95", PP_Fortran, INVALID, nullptr, "u")
77-
TYPE("f95-cpp-input", Fortran, PP_Fortran, nullptr, "u")
7882
TYPE("java", Java, INVALID, nullptr, "u")
7983

8084
// 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
@@ -107,6 +107,15 @@ namespace types {
107107
/// source file type (used for clang-cl emulation of \Yc).
108108
ID lookupHeaderTypeForSourceType(ID Id);
109109

110+
/// isFortran -- is it a Fortran input
111+
bool isFortran(ID Id);
112+
113+
/// isFreeFormFortran -- is it a free form layout Fortran input
114+
bool isFreeFormFortran(ID Id);
115+
116+
/// isFixedFormFortran -- is it a fixed form layout Fortran input
117+
bool isFixedFormFortran(ID Id);
118+
110119
} // end namespace types
111120
} // end namespace driver
112121
} // end namespace clang

lib/Driver/Action.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const char *Action::getClassName(ActionClass AC) {
2929
case PrecompileJobClass: return "precompiler";
3030
case AnalyzeJobClass: return "analyzer";
3131
case MigrateJobClass: return "migrator";
32+
case FortranFrontendJobClass: return "fortran-frontend";
3233
case CompileJobClass: return "compiler";
3334
case BackendJobClass: return "backend";
3435
case AssembleJobClass: return "assembler";
@@ -323,6 +324,12 @@ void MigrateJobAction::anchor() {}
323324
MigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
324325
: JobAction(MigrateJobClass, Input, OutputType) {}
325326

327+
void FortranFrontendJobAction::anchor() {}
328+
329+
FortranFrontendJobAction::FortranFrontendJobAction(Action *Input,
330+
types::ID OutputType)
331+
: JobAction(FortranFrontendJobClass, Input, OutputType) {}
332+
326333
void CompileJobAction::anchor() {}
327334

328335
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)