[cfe-commits] r51772 - in /cfe/trunk: include/clang/AST/Decl.h include/clang/AST/Type.h lib/AST/StmtIterator.cpp

Eli Friedman eli.friedman at gmail.com
Fri May 30 11:52:16 PDT 2008


On Fri, May 30, 2008 at 11:25 AM, Ted Kremenek <kremenek at apple.com> wrote:
>
> On May 30, 2008, at 10:01 AM, Eli Friedman wrote:
>
>>> Fix some strict-aliasing warnings by using Stmt* instead of Expr* in
>>> VariableArrayType, EnumConstantDecl, and VarDecl.
>>
>> Is it really necessary for StmtIterator to return a "Stmt*&"?  Having
>> an API like that is just asking for trouble.
>
> Originally it just returned Stmt*, but having Stmt*& proved to be extremely
> useful for the Objective-C rewriter.  I agree that it can be a source of
> problems if a client is not careful.

Mmm, not sure what to say.

>>> -  const Expr *getInit() const { return Init; }
>>> -  Expr *getInit() { return Init; }
>>> -  void setInit(Expr *I) { Init = I; }
>>> +  const Expr *getInit() const { return (const Expr*) Init; }
>>> +  Expr *getInit() { return (Expr*) Init; }
>>
>> cast<Expr*>(Init).  Same thing everywhere else.
>
> Using cast<Expr*> requires Decl.h including Expr.h (which is problematic to
> do since Expr.h includes Decl.h).  Use cast<Expr> and you will see that
> clang doesn't compile.  Same argument in Type.h

Oh; oops.  Didn't realize there was a dependency circle there.  I was
hoping we could use the cast templates to catch any mistakes with the
iterators.

-Eli



More information about the cfe-commits mailing list