[PATCH] D133157: Add -sanitizer-coverage-control-flow
Kostya Serebryany via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 1 16:45:03 PDT 2022
kcc added inline comments.
================
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));
----------------
Navidem wrote:
> 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.
yea, please simplify. ok to leave an assert
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