================
@@ -14690,6 +14690,13 @@ void Sema::FinalizeDeclaration(Decl *ThisDecl) {
     }
   }
 
+  // The result of __builtin_counted_by_ref cannot be assigned to a variable.
+  // It allows leaking and modification of bounds safety information.
+  if (IsBuiltinCountedByRef(VD->getInit()))
+    Diag(VD->getInit()->getExprLoc(),
+         diag::err_builtin_counted_by_ref_cannot_leak_reference)
+        << VD->getInit()->getSourceRange();
----------------
AaronBallman wrote:

It is the same in every case. Each time, the logic is:
```
if (IsBuiltinCountedByRef(SomeExpr))
  Diag(SomeExpr->getExprLoc(), 
diag::err_builtin_counted_by_ref_cannot_leak_reference) << 
SomeExpr->getSourceRange();
```
This would require changing some later to this equivalent:
```
  auto CheckBuiltinCountedByRef = [&](const Expr *E) {
    if (BinaryOperator::isAssignmentOp(Opc))
      CheckInvalidBuiltinCountedByRef(E);
    else if (IsBuiltinCountedByRef(E))
        Diag(E->getExprLoc(), diag::err_builtin_counted_by_ref_invalid_use)
            << 1 << E->getSourceRange();
  };
```

https://github.com/llvm/llvm-project/pull/116719
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to