Fortran::common::LanguageFeature::OpenMP)) {
fortranOptions.predefinitions.emplace_back("_OPENMP", "201511");
}
+ llvm::Triple targetTriple{llvm::Triple(this->targetOpts.triple)};
+ if (targetTriple.getArch() == llvm::Triple::ArchType::x86_64) {
+ fortranOptions.predefinitions.emplace_back("__x86_64__", "1");
+ fortranOptions.predefinitions.emplace_back("__x86_64", "1");
+ }
}
void CompilerInvocation::setFortranOpts() {
void CompilerInvocation::setSemanticsOpts(
Fortran::parser::AllCookedSources &allCookedSources) {
- const auto &fortranOptions = getFortranOpts();
+ auto &fortranOptions = getFortranOpts();
semanticsContext = std::make_unique<semantics::SemanticsContext>(
getDefaultKinds(), fortranOptions.features, allCookedSources);
llvm::Triple targetTriple{llvm::Triple(this->targetOpts.triple)};
// FIXME: Handle real(3) ?
- if (targetTriple.getArch() != llvm::Triple::ArchType::x86 &&
- targetTriple.getArch() != llvm::Triple::ArchType::x86_64) {
+ if (targetTriple.getArch() != llvm::Triple::ArchType::x86_64) {
semanticsContext->targetCharacteristics().DisableType(
Fortran::common::TypeCategory::Real, /*kind=*/10);
}
--- /dev/null
+! Test predefined macro for 64 bit X86 architecture
+
+! REQUIRES: x86-registered-target
+
+! RUN: %flang_fc1 -triple x86_64-unknown-linux-gnu -cpp -E %s | FileCheck %s
+
+! CHECK: integer :: var1 = 1
+! CHECK: integer :: var2 = 1
+
+#if __x86_64__
+ integer :: var1 = __x86_64__
+#endif
+#if __x86_64__
+ integer :: var2 = __x86_64
+#endif
+end program
endif()
add_custom_command(OUTPUT ${base}.mod
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
- COMMAND flang-new -fc1 -fsyntax-only -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
+ COMMAND flang-new -fc1 -cpp -fsyntax-only -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
${FLANG_SOURCE_DIR}/module/${filename}.f90
DEPENDS flang-new ${FLANG_SOURCE_DIR}/module/${filename}.f90 ${depends}
)