Skip to content

Commit

Permalink
gen: fix control-flow protection attribute marking (#4828)
Browse files Browse the repository at this point in the history
* gen/modules.cpp: use setModuleFlag API to replace ...

... the module attribute to avoid LLVM assertions if specified module
attribute already exists

* changelog for gen/module.cpp cf-protection fix
  • Loading branch information
liushuyu authored Jan 23, 2025
1 parent 9de21fd commit c71848f
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#### Platform support

#### Bug fixes
- Building multi-file D applications with control-flow protection will no longer cause LDC to throw an internal compiler error. (#4828)

# LDC 1.40.0 (2024-12-15)

Expand Down
7 changes: 5 additions & 2 deletions gen/modules.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -391,15 +391,18 @@ void registerModuleInfo(Module *m) {

void addModuleFlags(llvm::Module &m) {
const auto ModuleMinFlag = llvm::Module::Min;
const auto ConstantOne =
llvm::ConstantInt::get(LLType::getInt32Ty(m.getContext()), 1);
const auto ConstantOneMetadata = llvm::ConstantAsMetadata::get(ConstantOne);

if (opts::fCFProtection == opts::CFProtectionType::Return ||
opts::fCFProtection == opts::CFProtectionType::Full) {
m.addModuleFlag(ModuleMinFlag, "cf-protection-return", 1);
m.setModuleFlag(ModuleMinFlag, "cf-protection-return", ConstantOneMetadata);
}

if (opts::fCFProtection == opts::CFProtectionType::Branch ||
opts::fCFProtection == opts::CFProtectionType::Full) {
m.addModuleFlag(ModuleMinFlag, "cf-protection-branch", 1);
m.setModuleFlag(ModuleMinFlag, "cf-protection-branch", ConstantOneMetadata);
}
}

Expand Down

0 comments on commit c71848f

Please sign in to comment.