<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal">With the following code <o:p></o:p></p>
<p class="MsoNormal">//-------------------------<o:p></o:p></p>
<p class="MsoNormal">#include <stdio.h><o:p></o:p></p>
<p class="MsoNormal">extern int t;<o:p></o:p></p>
<p class="MsoNormal">void use_b (int *b){<o:p></o:p></p>
<p class="MsoNormal">    printf("%p\n",b);<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">void func(){<o:p></o:p></p>
<p class="MsoNormal">    int b;<o:p></o:p></p>
<p class="MsoNormal">    use_b(&b);<o:p></o:p></p>
<p class="MsoNormal">    if (b)<o:p></o:p></p>
<p class="MsoNormal">        b+=33;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">//---------------------------<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Running clang -Wuninitialized or running clang –analyze, I don’t see any warning for uninitialized variables. However, if I change the code to:<o:p></o:p></p>
<p class="MsoNormal">//----------------------<o:p></o:p></p>
<p class="MsoNormal">#include <stdio.h><o:p></o:p></p>
<p class="MsoNormal">extern int t;<o:p></o:p></p>
<p class="MsoNormal">void use_b (int *b){<o:p></o:p></p>
<p class="MsoNormal">    if (t==5)<o:p></o:p></p>
<p class="MsoNormal">        return;<o:p></o:p></p>
<p class="MsoNormal">    printf("%p\n",b);<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">void func(){<o:p></o:p></p>
<p class="MsoNormal">    int b;<o:p></o:p></p>
<p class="MsoNormal">    use_b(&b);<o:p></o:p></p>
<p class="MsoNormal">    if (b)<o:p></o:p></p>
<p class="MsoNormal">        b+=33;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">//--------------------<o:p></o:p></p>
<p class="MsoNormal">I do see this warning with the static analyzer:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">sa_try.c:13:9: warning: Branch condition evaluates to a garbage value [core.uninitialized.Branch]<o:p></o:p></p>
<p class="MsoNormal">    if (b)<o:p></o:p></p>
<p class="MsoNormal">        ^<o:p></o:p></p>
<p class="MsoNormal">1 warning generated.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My question is why am I not getting any warning for the first case? Is it being considered that printf is updating the value of b in some way?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Ali<o:p></o:p></p>
</div>
</body>
</html>