https://bugs.llvm.org/show_bug.cgi?id=48278

            Bug ID: 48278
           Summary: llvm-cov: marco in if statement leads to wrong code
                    coverage
           Product: Runtime Libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: libprofile library
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]

$ cat test.c
#define MK(A) (A << 2)

int foo(int q)
{
  if (q != MK(2))
    return 0;
  else
    return 1;
}

void main()
{
  int q = MK(2);
  int r = foo(q);
  printf("%d\n", r);
}

$ clang -O0 -w -fcoverage-mapping -fprofile-instr-generate=test.profraw test.c;
./a.out; llvm-profdata merge test.profraw -o test.profdata; llvm-cov show a.out
-instr-profile=test.profdata test.c > test.c.lcov; cat test.c.lcov
1
    1|      2|#define MK(A) (A << 2)
    2|       |
    3|       |int foo(int q)
    4|      1|{
    5|      1|  if (q != MK(2))
    6|      1|    return 0;
    7|      1|  else
    8|      1|    return 1;
    9|      1|}
   10|       |
   11|       |void main()
   12|      1|{
   13|      1|  int q = MK(2);
   14|      1|  int r = foo(q);
   15|      1|  printf("%d\n", r);
   16|      1|}

#################
Line #6 is wrongly marked as executed. When debug this program, Line#6 is not
hit by LLDB.


$ clang --version; llvm-cov --version
clang version 11.0.0 (/home/yibiao/.cache/yay/llvm-git/llvm-project
871beba234a83a2a02da9dedbd59b91a1bfbd7af)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
LLVM (http://llvm.org/):
  LLVM version 11.0.0
  Optimized build.
  Default target: x86_64-pc-linux-gnu
  Host CPU: skylake

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to