[cfe-commits] r89717 - in /cfe/trunk: include/clang/AST/Stmt.h lib/CodeGen/CGStmt.cpp lib/Frontend/PCHReaderStmt.cpp lib/Frontend/PCHWriterStmt.cpp lib/Sema/Sema.h lib/Sema/SemaExprCXX.cpp lib/Sema/SemaStmt.cpp lib/Sema/TreeTransform.h
Anders Carlsson
andersca at mac.com
Mon Nov 23 23:27:39 PST 2009
23 nov 2009 kl. 15.44 skrev Douglas Gregor:
> Author: dgregor
> Date: Mon Nov 23 17:44:04 2009
> New Revision: 89717
>
> URL: http://llvm.org/viewvc/llvm-project?rev=89717&view=rev
> Log:
> Explicitly track the condition variable within an "if" statement,
> rather than burying it in a CXXConditionDeclExpr (that occassionally
> hides behind implicit conversions). Similar changes for
> switch, while, and do-while will follow, then the removal of
> CXXConditionDeclExpr. This commit is the canary.
This broke the following test:
void *f();
template <typename T> T* g() {
if (T* t = f())
return t;
return 0;
}
void h() {
void *a = g<void>();
}
which is very common in clang (getAs<FooType>() :)
Also, if you're getting rid of CXXConditionDeclExpr, then how are you going to disambiguate between
if (void * f = foo()) { }
and
void *f = foo();
if (f) { }
Since both cond exprs in this case are going to be DeclRefExprs.
Anders
More information about the cfe-commits
mailing list