<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi all,
<div><br>
</div>
<div>I have an implementation for a new clang compiler warning that I'd like to upstream and I'm looking for guidance on how to get the process started.</div>
<div><br>
</div>
<div>The warning reports expressions inside macro expansions that evaluate in an unexpected way due to missing parens, either around a macro argument name or around the entire macro body. This is a super common mistake that has probably been made by anyone
 who has written a C macro in their life, but I'm not aware of any compilers or other tools that help catch these bugs.</div>
<div><br>
</div>
<div>An example:</div>
<div><span style="font-family: "Courier New", monospace;">    #define TWO 1 + 1</span></div>
<div><span style="font-family: "Courier New", monospace;">    int f() {</span></div>
<div><span style="font-family: "Courier New", monospace;">        return TWO * 2; // Actually returns 3</span></div>
<div><span style="font-family: "Courier New", monospace;">    }</span></div>
<div><br>
</div>
<div>Clang output:</div>
<div><span style="font-family: "Courier New", monospace;">    a.c:1:15: warning: misleading evaluation of expression in expansion of macro TWO due to missing parentheses</span></div>
<div><span style="font-family: "Courier New", monospace;">    #define TWO 1 + 1</span></div>
<div><span style="font-family: "Courier New", monospace;">                  ^</span></div>
<div><span style="font-family: "Courier New", monospace;">    a.c:3:16: note: expression has higher precedence than expression inside macro body</span></div>
<div><span style="font-family: "Courier New", monospace;">        return TWO * 2;</span></div>
<div><span style="font-family: "Courier New", monospace;">                   ^</span></div>
<div><span style="font-family: "Courier New", monospace;">    a.c:3:12: note: low precedence expression is hidden by expansion of macro TWO</span></div>
<div><span style="font-family: "Courier New", monospace;">        return TWO * 2;</span></div>
<div><span style="font-family: "Courier New", monospace;">               ^</span></div>
<div><span style="font-family: "Courier New", monospace;">    1 warning generated.</span></div>
<div><br>
</div>
<div>We've been using this warning internally for about a year now, but mostly on closed code so unfortunately I can't show those results here. I'm in the process of gathering results on open-source code now for evaluation purposes.<br>
</div>
<div><br>
</div>
<div>So, what should be my next steps?</div>
<div><br>
</div>
<div>Thanks,</div>
Brad Moody<br>
</div>
</body>
</html>