<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<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);">
I guess you might have more luck with this query on the Clang mailing list:  <a href="mailto:cfe-dev@lists.llvm.org" style="font-size: medium; font-family: "Times New Roman";">cfe-dev@lists.llvm.org</a></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Conrad Poelman via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Sent:</b> 31 October 2019 19:59<br>
<b>To:</b> llvm-dev@lists.llvm.org <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> [llvm-dev] Initializer expression SourceRange differs between c++14 and c++17, affecting clang-tidy</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div></div>
<div>When parsing a named declaration with an equals sign with clang -std c++11/14, clang builds an initializer expression whose SourceRange covers from variable name through the end of the initial value:<br>
</div>
<div><span style="font-family:monospace">  std::string foo = "bar";</span></div>
<div><span style="font-family:monospace"></span>
<div><span style="font-family:monospace">              -----------<br>
</span></div>
</div>
<div><br>
</div>
<div>When parsing the same code with clang -std c++17/2x, the initializer expression's SourceRange only includes the initial value itself, and not the variable name or the equals sign:</div>
<div>
<div><span style="font-family:monospace">  std::string foo = "bar";</span><span style="font-family:monospace"><br>
</span></div>
<div><span style="font-family:monospace">                    -----<br>
</span></div>
<br>
</div>
<div>
<div>If the string is initialized using parentheses rather than an equals sign, in all of c++11/14/17/2x the initializer expression's SourceRange includes the variable name and both parentheses:</div>
<div>
<div><span style="font-family:monospace">  std::string foo("bar");</span><span style="font-family:monospace"><br>
</span></div>
<div><span style="font-family:monospace">              ----------<br>
</span></div>
<br>
</div>
</div>
<div>This difference breaks clang-tidy's <a href="https://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-string-init.html">
readability-remove-redundant-string</a> for c++17 and c++2x, as described in at <a href="https://reviews.llvm.org/D69238/">
reviews.llvm.org/D69238</a>. Is this SourceRange difference intentional, and if not does anyone have thoughts on how to make the SourceRange consistent across C++ standards? Thanks!<br>
</div>
<div><br>
</div>
</div>
</div>
</body>
</html>