[PATCH] D133157: Add -sanitizer-coverage-control-flow

Navid Emamdoost via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 1 16:43:08 PDT 2022


Navidem marked 4 inline comments as done.
Navidem added inline comments.


================
Comment at: llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp:1055
+  for (auto &BB: F) {
+    // blockaddress may not be used on function's entry block.
+    if (&BB == &F.getEntryBlock())
----------------
kcc wrote:
> "can not" ?
Actually I started with "can not", but saw the error message from opt saying "may not". Changing anyways :)


================
Comment at: llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp:1062
+    for (auto SuccBB : successors(&BB)) {
+      if (SuccBB == &F.getEntryBlock())
+        CFs.push_back((Constant *)IRB.CreatePointerCast(&F, IntptrPtrTy));
----------------
kcc wrote:
> hmmm... is it even possible?
I was being cautious here for the branches (like `goto`) to the beginning of the function.
But later once checked a concrete example, I was not able to produce such scenario.

something like the following code breaks the entry basic block:

```
int foo (int x) {
top:
  x += 5;
  if (x > 5)
    bar(x);
  else
    goto top;

  return x;
}
```
```
define dso_local i32 @foo(i32 noundef %x) #0 {
entry:
  %x.addr = alloca i32, align 4
  store i32 %x, ptr %x.addr, align 4
  br label %top

top:                                              ; preds = %if.else, %entry
  %0 = load i32, ptr %x.addr, align 4
  %add = add nsw i32 %0, 5
  store i32 %add, ptr %x.addr, align 4
  %1 = load i32, ptr %x.addr, align 4
  %cmp = icmp sgt i32 %1, 5
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %top
  %2 = load i32, ptr %x.addr, align 4
  call void @bar(i32 noundef %2)
  br label %if.end

if.else:                                          ; preds = %top
  br label %top

if.end:                                           ; preds = %if.then
  %3 = load i32, ptr %x.addr, align 4
  ret i32 %3
}
```

If you think it is impossible, I am fine with simplifying the code here.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133157/new/

https://reviews.llvm.org/D133157



More information about the llvm-commits mailing list