cjappl wrote:
Hi @dougsonos, Just starting to integrate our two changes and noticing a possible bug here. Issue: `blocking(false)` does not seem to resolve to `nonblocking` ## Streps to repro: 1. Have an example like ``` int main() [[clang::blocking(false)]] { return 0; } ``` 2. (optional, if you can't get diagnostics another way) Apply this patch to llvm, and recompile clang ``` diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 69548902dc43..3047ed1e1887 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2404,6 +2404,15 @@ void CodeGenModule::ConstructAttributeList(StringRef Name, FuncAttrs.addAttribute(llvm::Attribute::NoReturn); NBA = Fn->getAttr<NoBuiltinAttr>(); } + + llvm::raw_fd_ostream stream(1, true); + const auto effects = Fn->getFunctionEffects(); + if (not effects.empty()) + { + stream << "Function: " << Fn->getNameAsString().c_str() << "\n"; + Fn->getFunctionEffects().dump(stream); + stream << "\n"; + } } if (isa<FunctionDecl>(TargetDecl) || isa<VarDecl>(TargetDecl)) { ``` 3. Compile aforementioned main file with the new perf-constraints clang ## Observed `blocking(false)` incorrectly resolves to `blocking`, when it should be `nonblocking` ``` > ninja [1/2] Building CXX object CMakeFiles/MyExecutable.dir/main.cpp.o Function: main Effects{blocking} ... ``` All the other (non)blocking conditionals seem to work as intended. 1. `nonblocking(true)` -- should resolve to nonblocking ✅ ``` Function: main Effects{nonblocking} ``` 2. `nonblocking(false)` -- should resolve to blocking ✅ ``` Function: main Effects{blocking} ``` 3. `blocking(true)` -- should resolve to blocking ✅ ``` Function: main Effects{blocking} ``` https://github.com/llvm/llvm-project/pull/84983 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits