<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/93045>93045</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
function dynamically allocating an object is incorrectly marked as nonexecutable with clang gcov on Windows
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
PavelAndrejs
</td>
</tr>
</table>
<pre>
Hi,
I am using clang gcov to measure code coverage in a C++ project. On Windows I am facing a problem. If a function contains dynamic allocation of an object, the whole function is marked as nonexecutable. It can be replicated with this code:
```
#include <stdio.h>
class tt{
public:
tt(){
puts("tt");
}
};
void foo(){
puts("foo");
}
int main(int argc, char **argv){
foo();
tt *t = new tt();
foo();
return 0;
}
```
I run these commands:
```
clang++.exe --coverage bad.cpp
a.exe
llvm-cov.exe gcov -t a-bad.gcno
```
and this is the result:
```
foo
tt
foo
-: 0:Source:bad.cpp
-: 0:Graph:a-bad.gcno
-: 0:Data:a-bad.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:class tt{
-: 3: public:
1: 4: tt(){
1: 5: puts("tt");
1: 6: }
-: 7:};
-: 8:
2: 9:void foo(){
2: 10: puts("foo");
2: 11:}
-: 12:
-: 13:int main(int argc, char **argv){
-: 14: foo();
-: 15: tt *t = new tt();
-: 16: foo();
-: 17: return 0;
-: 18:}
```
The `main` function was executed, but is marked as nonexecutable. There is still a possibility that I am doing something wrong, but following the same steps on Linux gives me expected results:
```
foo
tt
foo
-: 0:Source:bad.cpp
-: 0:Graph:bad.gcno
-: 0:Data:bad.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:class tt{
-: 3: public:
1: 4: tt(){
1: 5: puts("tt");
1: 6: }
-: 7:};
-: 8:
2: 9:void foo(){
2: 10: puts("foo");
2: 11:}
-: 12:
1: 13:int main(int argc, char **argv){
1: 14: foo();
1: 15: tt *t = new tt();
1: 16: foo();
1: 17: return 0;
#####: 18:}
```
Also if I create the object on the stack, the result on windows is as expected:
```
-: 0:Source:bad.cpp
-: 0:Graph:a-bad.gcno
-: 0:Data:a-bad.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:class tt{
-: 3: public:
1: 4: tt(){
1: 5: puts("tt");
1: 6: }
-: 7:};
-: 8:
2: 9:void foo(){
2: 10: puts("foo");
2: 11:}
-: 12:
1: 13:int main(int argc, char **argv){
1: 14: foo();
-: 15:// tt *t = new tt();
1: 16: tt t;
1: 17: foo();
1: 18: return 0;
-: 19:}
```
I tried this with clang 12 installed from MSVS 2019 and clang 18.1.6 downloaded from https://github.com/llvm/llvm-project/releases
The source-based code coverage also provides expected results, but I am facing different problems with it.
Can you please help me with this?
Thank you
Pavel
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWE9v47YS_zT0ZRBDovz34IOTvLwX4BVddBfteUSOJO5SpEFSdvLtC0qyLTt24m7bWwJDYjQ_ksPhzI_DQe9VaYhWbHrPpo8jbEJl3eoLbkmvjXT03Y9yK19X_1OMP7DkkSXrZ8AaGq9MCUKjKaEUdgvBQk3oG0cgrIyPLTksCZQBhAfG7xm_h42z30mEMfxq4A9lpN15aMcrUMQBMSJyTfUYngtAKBojgrIGhDUBlfEgXw3WSgBqbQW2MlsAGrB5HJnxBwgVwa6ymo7dlYca3Q-SgB6MNfRCogmYaxrDcwCBBnICRxutBAaSsFOhglAp366GZetu7WyW9L_uX54pI3QjCVj24INUdlyx7D-dVGj0HkJg8_vuAwDApsm1EocBof8LgfEF48sT7P5v0wTfinmE8QjLzmBs_tirNH88CLvn1ioJhbUXJjgO3MpPRj6O2D6VCVCjMowvYhNdKaKtRYUOGF8zvkZXbs8nOE47VDiE2CUAyx7B0O64-OzDro5C4wwkF9Q83ZpncI2JruCjL9Y1GumvbWPrxp2HjumF4O7u4L05yrHYbDocRmnX1HpbR1SLbwPgLgDeRXgpjL04DRrZuZTyrY868o0O15SK628bIZx92O_5HcvadsKy9VfbOBH99EThS8j_OtxULFufK3sJ-4gBB1CJ16G_NSbaN72O-OJs6bB-B5VGW7wbUuc9OMsuh9kQlPXvK6GX9uJJ_343HPfg6QB8Y4juu84GXQ_ee67zPKo5COVz-eLNMngvWbLsvZAfQNPkYJjrNHDeJ-0Vu6RVyt9otZfEPfg5ChmOst-iy9wwRO735yaqGXac3TzFvEe-oaRz4GJosrMo_1YRsFnSmmWWHA-sHXroDimS0Uh5E949xL5V5CgifFBax3PUeq9ypVV4hVBh6I5ZaeMp621NoYqtnbOR-brxC6u13cXPkZ081gQ-0MaDNfB_ZZoXKNWWPNQE9LIhEc_JjsOuMuu_TWI3U9gngZ2BPwnsNgJL_xECS28msPRnCSy9mcDSWwiM8ezk9zGVrbW3oAp4BuEIA7Us0mXlkUFaTgkofuxT9I46omjX3wSUh5b2Om65ximXQvMz_flkj0_2OE1_GH9i_An-DoeEAOFD-viYaBa3ZkrLE3q5fK0LTlF_j2ov6V0NIuWgjA-oNUkonK3hl6-_fwWepEuI964etRin4xlIuzPaotxDqxA2_mCxUoWqycfC1ow_xXte_7rrixeMPznShJ78UNGYyfmWhu5y9CThrA6CkR43zm6VJP82gepzsGExRKqiIEcm7Isi_YpVGMNw5gc08Gob2LRKQUV6E3O0QwmDZU-niqL5ETsMP7YVn5FcZXKZLXFEq3SezrJlMl8mo2olFlk-TeZLmueTWTEpZDqZC5KiwCTPCkpGasUTPkmmnKfTNEuTMZeZlHmWkVwkQqQTNkmoRqXH0ZJj68qR8r6h1TJLJtORxpy0b4tQnPe3cc6mjyO3ai2fN6Vnk0QrH_xxhKCCptUhZe4rQ6j166E6ZMpjaSgeL8oI6xyJoF-v5dKt3dgDZ-tkUN6yh3rVqHF69Zc9pl2tZ_ypW_B2xf8MAAD__0kG9jQ">