================
@@ -366,22 +360,55 @@ bool SemaAMDGPU::checkCoopAtomicFunctionCall(CallExpr
*TheCall, bool IsStore) {
// Atomic ordering cannot be acq_rel in any case, acquire for stores or
// release for loads.
if (!llvm::isValidAtomicOrderingCABI((unsigned)Ord) ||
- (Ord == llvm::AtomicOrderingCABI::acq_rel) ||
- Ord == (IsStore ? llvm::AtomicOrderingCABI::acquire
- : llvm::AtomicOrderingCABI::release)) {
+ (!(MayLoad && MayStore) && (Ord == llvm::AtomicOrderingCABI::acq_rel)) ||
+ (!MayLoad && Ord == llvm::AtomicOrderingCABI::acquire) ||
+ (!MayStore && Ord == llvm::AtomicOrderingCABI::release)) {
return Diag(AtomicOrdArg->getBeginLoc(),
diag::warn_atomic_op_has_invalid_memory_order)
<< 0 << AtomicOrdArg->getSourceRange();
}
- // Last argument is a string literal
+ return false;
+}
+
+bool SemaAMDGPU::checkStringLiteralArg(CallExpr *TheCall, unsigned ArgIdx) {
----------------
jhuber6 wrote:
I'm guessing `_Constant` doesn't mix well with `const char *`s so we can't rely
on the autogenerated sema handling?
https://github.com/llvm/llvm-project/pull/177343
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits