aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorIan McInerney <mcianster@gmail.com>2025-08-14 17:48:20 +0100
committerGitHub <noreply@github.com>2025-08-14 17:48:20 +0100
commit28d5bc5649a9d004d7a91f4a3639aa6aa3b130b2 (patch)
tree0d8e635a39404a1cd33f22b166a017c471a8f5ee /flang/lib/Frontend/CompilerInvocation.cpp
parenta5ba6067d619b0dd5f7b660ff4658f9af43db556 (diff)
downloadllvm-28d5bc5649a9d004d7a91f4a3639aa6aa3b130b2.zip
llvm-28d5bc5649a9d004d7a91f4a3639aa6aa3b130b2.tar.gz
llvm-28d5bc5649a9d004d7a91f4a3639aa6aa3b130b2.tar.bz2
[Flang][Driver] Predefine pic/pie macros based on configured level (#153449)
Predefine the `__pic__/__pie__/__PIC__/__PIE__` macros based on the configured relocation level. This logic mirrors that of the clang driver, where `__pic__/__PIC__` are defined for both PIC and PIE modes, but `__pie__/__PIE__` are only defined for PIE mode. Fixes https://github.com/llvm/llvm-project/issues/135275
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--flang/lib/Frontend/CompilerInvocation.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 708fb7f..3811a87 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1703,6 +1703,20 @@ void CompilerInvocation::setDefaultPredefinitions() {
fortranOptions.predefinitions.emplace_back("__flang_patchlevel__",
FLANG_VERSION_PATCHLEVEL_STRING);
+ // Add predefinitions based on the relocation model
+ if (unsigned PICLevel = getCodeGenOpts().PICLevel) {
+ fortranOptions.predefinitions.emplace_back("__PIC__",
+ std::to_string(PICLevel));
+ fortranOptions.predefinitions.emplace_back("__pic__",
+ std::to_string(PICLevel));
+ if (getCodeGenOpts().IsPIE) {
+ fortranOptions.predefinitions.emplace_back("__PIE__",
+ std::to_string(PICLevel));
+ fortranOptions.predefinitions.emplace_back("__pie__",
+ std::to_string(PICLevel));
+ }
+ }
+
// Add predefinitions based on extensions enabled
if (frontendOptions.features.IsEnabled(
Fortran::common::LanguageFeature::OpenACC)) {