[cfe-dev] Is it safe to cast-away constness to use Clang static analysis?

John McCall via cfe-dev cfe-dev at lists.llvm.org
Sat Oct 14 13:59:54 PDT 2017

> On Oct 13, 2017, at 9:13 PM, Roman Popov <ripopov at gmail.com> wrote:
> Well, after a couple of weeks of playing with developing toy Clang-based tool I came to conclusion that it is better to create pointers to const AST nodes.
> For two reasons:
> 1) ast Matchers are widely used in practice. They are often more convenient than writing custom ast visitors for every small subtree search.
> And I don't want to do const_cast each time you use ast Matcher.
> 2)  Most standard C++ classes are mutable, so it's hard to explain non-Clang developer that you omitting const here because object is immutable by design
> So it's easier to const than not to const...

You could make the matchers take const pointers by default.  But ultimately it's your API; do what you want.


> 2017-10-04 11:40 GMT-07:00 John McCall <rjmccall at apple.com <mailto:rjmccall at apple.com>>:
>> On Oct 4, 2017, at 2:21 PM, Roman Popov <ripopov at gmail.com <mailto:ripopov at gmail.com>> wrote:
>> In conclusion: 
>> Should AST matchers should return non-const pointers to comply with Clang coding standard for immutable objects?
> I think it is more likely than not that the Clang ASTs will gradually standardize on taking non-const pointers.  Given that AST matchers tend to create out-of-tree dependencies, I think it would be better for them to go ahead and work primarily with non-const pointers.
> If you want to do some of the work to make the ASTs traffic in non-const pointers, that would be good, too, although we should first get consensus that that's the direction we want to go in.
> John.
>> 2017-10-04 11:14 GMT-07:00 John McCall via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>>:
>> > On Oct 4, 2017, at 3:30 AM, Csaba Raduly via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>> >
>> > On Wed, Oct 4, 2017 at 2:20 AM, John McCall via cfe-dev
>> > <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>> >>
>> >> The AST is largely immutable by design, and the best solution would probably
>> >> be to adopt what LLVM did to Type and just mass-refactor code to stop
>> >> passing around const pointers at all.
>> >
>> > If the AST is meant to be immutable, why not pass const
>> > {pointers,references} around?
>> If the objects are actually immutable, const is just noise repeated everywhere, because a non-const object is basically a useless type.
>> John.
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171014/c38bdba7/attachment.html>

More information about the cfe-dev mailing list