[cfe-dev] Constructors vs Copy Constructors in Clang

Douglas Gregor dgregor at apple.com
Fri Sep 17 08:04:47 PDT 2010


On Sep 17, 2010, at 2:30 AM, Jim Goodnow II wrote:

> Hi,
> 
> One of the things that I'm seeing in several places is where 
> VarDecl::getInit() is returning an Expr that is CXXConstructExpr when 
> a class variable is declared. However, the logic that follows the 
> getInit() call usually assumes that if a non-NULL value is returned, 
> there is a value being assigned. In the case of a constructor, that's 
> sort of true but not completely unless it is a copy constructor.

It need not always be a copy constructor. Any constructor could occur there. A CXXConstructExpr occurs anywhere that we're performing initialization by constructor.


> So, 
> a question of philosophy:
> 
> Should getInit() return NULL when the constructor is not a copy 
> constructor to support the logic in most cases? This might break or 
> require a rework of things that do handle getInit() correctly like 
> CodeGen and require a different call to get a non-copy constructor initializer.
> 
> Or should the calls to getInit() be qualified by an additional call 
> to an 'isCopyConstructor()' function where appropriate?


Why do you consider copy constructors to be special? They are elidable in some cases (and CXXConstructExpr tells us when the construction can be elided), but they aren't the only kinds of constructors that are elidable (C++0x allows move constructors to be elided, too). Static analysis need not treat them as special, unless for some reason that improves results.

	- Doug



More information about the cfe-dev mailing list