[flang][driver] Add standard macro predefinitions for compiler version

Add the following standard predefinitions that f18 supports:
  * `__flang__`,
  * `__flang_major__`,
  * `__flang_minor__`,
  * `__flang_patchlevel__`

Summary of changes:
- Populate Fortran::parser::Options#predefinitions with the default
  supported predefinitions

Differential Revision: https://reviews.llvm.org/D94516
This commit is contained in:
Faris Rehman 2021-01-19 13:15:53 +00:00 committed by Andrzej Warzynski
parent a60bc55c69
commit 197d9a55f1
2 changed files with 39 additions and 0 deletions

View file

@ -8,6 +8,7 @@
#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"
@ -258,6 +259,18 @@ void CompilerInvocation::SetDefaultFortranOpts() {
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() {

View file

@ -0,0 +1,26 @@
! 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__