diff options
author | Ian McInerney <mcianster@gmail.com> | 2025-08-14 17:48:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-14 17:48:20 +0100 |
commit | 28d5bc5649a9d004d7a91f4a3639aa6aa3b130b2 (patch) | |
tree | 0d8e635a39404a1cd33f22b166a017c471a8f5ee /flang/lib/Frontend/CompilerInvocation.cpp | |
parent | a5ba6067d619b0dd5f7b660ff4658f9af43db556 (diff) | |
download | llvm-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.cpp | 14 |
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)) { |