<div dir="ltr"><div>Hi everyone,</div><div>The following is a code from a test in the Clang Static Analyzer (clang/test/Analysis/pointer-to-member.cpp): Why are the last two statements expected to produce a warning?<br></div><div><div style="color:rgb(166,172,205);background-color:rgb(15,17,26);font-family:"FiraCode Nerd Font","Droid Sans Mono","monospace",monospace,"Droid Sans Fallback";font-weight:normal;font-size:13px;line-height:18px;white-space:pre"><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">B</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span></div><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(199,146,234)">int</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">f</span><span style="color:rgb(137,221,255)">;</span></div><div><span style="color:rgb(137,221,255)">};</span></div><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">L1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">:</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(199,146,234)">public</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">B</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">};</span></div><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">R1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">:</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(199,146,234)">public</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">B</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">};</span></div><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">M</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">:</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(199,146,234)">public</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">L1</span><span style="color:rgb(137,221,255)">,</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">R1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">};</span></div><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">L2</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">:</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(199,146,234)">public</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">M</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">};</span></div><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">R2</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">:</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(199,146,234)">public</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">M</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">};</span></div><div><span style="color:rgb(199,146,234)">struct</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">D2</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">:</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(199,146,234)">public</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">L2</span><span style="color:rgb(137,221,255)">,</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">R2</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">};</span></div><br><div><span style="color:rgb(199,146,234)">void</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(130,170,255)">diamond</span><span style="color:rgb(137,221,255)">()</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">{</span></div><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(255,203,107)">M</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">m</span><span style="color:rgb(137,221,255)">;</span></div><br><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(137,221,255)">static_cast<</span><span style="color:rgb(255,203,107)">L1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">*>(&</span><span style="color:rgb(166,172,205)">m</span><span style="color:rgb(137,221,255)">)-></span><span style="color:rgb(166,172,205)">f</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">=</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(247,140,108)">7</span><span style="color:rgb(137,221,255)">;</span></div><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(137,221,255)">static_cast<</span><span style="color:rgb(255,203,107)">R1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">*>(&</span><span style="color:rgb(166,172,205)">m</span><span style="color:rgb(137,221,255)">)-></span><span style="color:rgb(166,172,205)">f</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">=</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(247,140,108)">16</span><span style="color:rgb(137,221,255)">;</span></div><br><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(199,146,234)">int</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">L1</span><span style="color:rgb(137,221,255)">::*</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">pl1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">=</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">&</span><span style="color:rgb(255,203,107)">B</span><span style="color:rgb(137,221,255)">::</span><span style="color:rgb(166,172,205)">f</span><span style="color:rgb(137,221,255)">;</span></div><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(199,146,234)">int</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">M</span><span style="color:rgb(137,221,255)">::*</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">pm_via_l1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">=</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">pl1</span><span style="color:rgb(137,221,255)">;</span></div><br><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(199,146,234)">int</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">R1</span><span style="color:rgb(137,221,255)">::*</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">pr1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">=</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">&</span><span style="color:rgb(255,203,107)">B</span><span style="color:rgb(137,221,255)">::</span><span style="color:rgb(166,172,205)">f</span><span style="color:rgb(137,221,255)">;</span></div><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(199,146,234)">int</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(255,203,107)">M</span><span style="color:rgb(137,221,255)">::*</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">pm_via_r1</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">=</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(166,172,205)">pr1</span><span style="color:rgb(137,221,255)">;</span></div><br><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(130,170,255)">clang_analyzer_eval</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(166,172,205)">m</span><span style="color:rgb(240,113,120)">.</span><span style="color:rgb(137,221,255)">*(</span><span style="color:rgb(166,172,205)">pm_via_l1</span><span style="color:rgb(137,221,255)">)</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">==</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(247,140,108)">7</span><span style="color:rgb(137,221,255)">);</span><span style="color:rgb(70,75,93);font-style:italic"> // expected-warning {{TRUE}}</span></div><div><span style="color:rgb(240,113,120)">  </span><span style="color:rgb(130,170,255)">clang_analyzer_eval</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(166,172,205)">m</span><span style="color:rgb(240,113,120)">.</span><span style="color:rgb(137,221,255)">*(</span><span style="color:rgb(166,172,205)">pm_via_r1</span><span style="color:rgb(137,221,255)">)</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(137,221,255)">==</span><span style="color:rgb(240,113,120)"> </span><span style="color:rgb(247,140,108)">16</span><span style="color:rgb(137,221,255)">);</span><span style="color:rgb(70,75,93);font-style:italic"> // expected-warning {{TRUE}}</span></div><div><span style="color:rgb(137,221,255)">}</span></div></div></div><div>Warm Regards,</div><div>Deep<br></div><div><div style="color:rgb(166,172,205);background-color:rgb(15,17,26);font-family:"FiraCode Nerd Font","Droid Sans Mono","monospace",monospace,"Droid Sans Fallback";font-weight:normal;font-size:13px;line-height:18px;white-space:pre"></div></div></div>