nataraj-hates-MS-for-stealing-github wrote:

Hi! I see this patch is already merged, but sine the most testing work is 
already done, I will still write my report here.

I am original reporter of #51560.
@ArtSin asked me to test the patch. 

TL;TR: `%b` solves my problem, but `%p` still breaks everything, and I guess 
that is another bug.

I met problem with coverage while building coverage while running PostgreSQL 
tests. Tried `%p` and `%m` in all combinations in  `LLVM_PROFILE_FILE` and it 
failed for me with various errors.

How dif I test: I built two branches of llvm: `main` from 
https://github.com/llvm/llvm-project.git 
(f3c4b58f4b0d98c8de29dd235a34e512be71ab3f) and 
`add-binary-id-llvm_profile_file` from 
https://github.com/ArtSin/llvm-project.git (will refer is as `fixed`)

I've configured them with command

```
cmake -S llvm -B build -G "Unix Makefiles" 
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DCMAKE_BUILD_TYPE=Debug 
-DLLVM_ENABLE_RUNTIMES="compiler-rt"  
-DLLVM_RUNTIME_TARGETS="x86_64-unknown-linux-gnu"  
-DLLVM_BUILTIN_TARGETS="x86_64-unknown-linux-gnu"
``` 

and then `make -j10` and `sudo make install`.

Then I've cloned PostgreSQL `git clone 
git://git.postgresql.org/git/postgresql.git -b REL_17_STABLE`, configured them 
with
```
CC=/usr/local/bin/clang LD=/usr/local/bin/clang CXX=/usr/local/bin/clang++ 
CFLAGS="-fprofile-instr-generate -fcoverage-mapping -Wl,--build-id " 
./configure --enable-debug --enable-cassert --enable-tap-tests
```
Using `main` and `fiexd` clangs. And build them using `make -j10 world-bin`

Then I tried running tests for both builds using `make check-world` command 
with various  `LLVM_PROFILE_FILE` values

### `main` branch

* running tests with only `%m` in `LLVM_PROFILE_FILE` ends with a lot of errors 
while running tests like :

```
LLVM Profile Warning: Unable to merge profile data: source profile file is not 
compatible.                                                                     
                                                  
LLVM Profile Error: Profile Merging of file 
/home/nataraj/dev/clang/postgres-clang-main/../profile-clang-main-no-p/15781143787294967941_0.profraw
 failed: File exists                                            
LLVM Profile Error: Failed to write file 
"/home/nataraj/dev/clang/postgres-clang-main/../profile-clang-main-no-p/15781143787294967941_0.profraw":
 File exists
```

this tests fails.

* running with both `%m` and `%p`  in `LLVM_PROFILE_FILE` creates a lot of 
files in profile directory (9Gb) and when you try to merge them, you will get: 

```
warning: ../profile-clang-main/167104_786791946722153948_0_.profraw: invalid 
instrumentation profile data (file header is corrupt)                           
                                                     
warning: ../profile-clang-main/147831_786791946722153948_0_.profraw: invalid 
instrumentation profile data (file header is corrupt)                           
                                                     
warning: ../profile-clang-main/147887_786791946722153948_0_.profraw: invalid 
instrumentation profile data (file header is corrupt)                           
                                                     
error: no profile can be merged  
```

### fixed branch

* If you run tests with `%m` and `%b`  in `LLVM_PROFILE_FILE` you will get 
quite small profile dir (7Mb), this raw profile files will be successfully 
merged, and you will be able to create html-coverage files from it, with 
coverage that looks like it was really created while running tests. So the 
patch works. Hooray!!!!

* But if have `%p` to the  in `LLVM_PROFILE_FILE` (with `%m` and `%b` or 
without them) in fixed branch you will still get 9Gb profile directory that 
can't be merged:

```
/usr/local/bin/llvm-profdata merge -output=../merged-clang-fix-p-4-cpu.profdata 
--input-files=`pwd`/../profile-clang-fix-p-4-cpu.list
warning: 
/home/nataraj/dev/clang/postgres-clang-fix/../profile-clang-fix-p-4-cpu/15196_786791946722153948_0_43a62d1842c2c30141d2cd5140b00e7064205c3d.profraw:
 invalid instrumentation profile data (file header is corrupt)
warning: 
/home/nataraj/dev/clang/postgres-clang-fix/../profile-clang-fix-p-4-cpu/34197_786791946722153948_0_43a62d1842c2c30141d2cd5140b00e7064205c3d.profraw:
 invalid instrumentation profile data (file header is corrupt)
warning: 
/home/nataraj/dev/clang/postgres-clang-fix/../profile-clang-fix-p-4-cpu/15252_786791946722153948_0_43a62d1842c2c30141d2cd5140b00e7064205c3d.profraw:
 invalid instrumentation profile data (file header is corrupt)
error: no profile can be merged
```

Tested it on VMs with (10,4,2 and 1 CPUs) So I can guess problems with `%p` is 
not caused by a collision, and should be solved later I guess. 

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

Reply via email to