#include "flang/Frontend/CompilerInvocation.h"
#include "flang/Frontend/PreprocessorOptions.h"
+#include "flang/Version.inc"
#include "clang/Basic/AllDiagnostics.h"
#include "clang/Basic/DiagnosticDriver.h"
#include "clang/Basic/DiagnosticOptions.h"
std::vector<std::string> searchDirectories{"."s};
fortranOptions.searchDirectories = searchDirectories;
fortranOptions.isFixedForm = false;
+
+ // Populate the macro list with version numbers and other predefinitions.
+ // TODO: When expanding this list of standard predefinitions, consider
+ // creating a dedicated API for this. Also at some point we will need to
+ // differentiate between different targets.
+ fortranOptions.predefinitions.emplace_back("__flang__", "1");
+ fortranOptions.predefinitions.emplace_back(
+ "__flang_major__", FLANG_VERSION_MAJOR_STRING);
+ fortranOptions.predefinitions.emplace_back(
+ "__flang_minor__", FLANG_VERSION_MINOR_STRING);
+ fortranOptions.predefinitions.emplace_back(
+ "__flang_patchlevel__", FLANG_VERSION_PATCHLEVEL_STRING);
}
void CompilerInvocation::setFortranOpts() {
--- /dev/null
+! Check that the driver correctly defines macros with the compiler version
+
+! REQUIRES: new-flang-driver
+
+!--------------------------
+! FLANG DRIVER (flang-new)
+!--------------------------
+! RUN: %flang-new -E %s 2>&1 | FileCheck %s --ignore-case
+
+!-----------------------------------------
+! FRONTEND FLANG DRIVER (flang-new -fc1)
+!-----------------------------------------
+! RUN: %flang-new -fc1 -E %s 2>&1 | FileCheck %s --ignore-case
+
+!-----------------
+! EXPECTED OUTPUT
+!-----------------
+! CHECK: flang = 1
+! CHECK: flang_major = {{[1-9][0-9]*$}}
+! CHECK: flang_minor = {{[0-9]+$}}
+! CHECK: flang_patchlevel = {{[0-9]+$}}
+
+integer, parameter :: flang = __flang__
+integer, parameter :: flang_major = __flang_major__
+integer, parameter :: flang_minor = __flang_minor__
+integer, parameter :: flang_patchlevel = __flang_patchlevel__