[cfe-commits] r147730 - in /cfe/trunk: include/clang/Sema/Sema.h lib/CodeGen/CodeGenFunction.cpp lib/Parse/ParseDecl.cpp lib/Sema/SemaDecl.cpp test/CodeGen/vla.c
Douglas Gregor
dgregor at apple.com
Sat Jan 7 12:33:26 PST 2012
On Jan 7, 2012, at 2:52 AM, Abramo Bagnara wrote:
> Author: abramo
> Date: Sat Jan 7 04:52:36 2012
> New Revision: 147730
>
> URL: http://llvm.org/viewvc/llvm-project?rev=147730&view=rev
> Log:
> Fixed TypeofExpr AST and code generation.
>
> Modified:
> cfe/trunk/include/clang/Sema/Sema.h
> cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
> cfe/trunk/lib/Parse/ParseDecl.cpp
> cfe/trunk/lib/Sema/SemaDecl.cpp
> cfe/trunk/test/CodeGen/vla.c
>
> Modified: cfe/trunk/include/clang/Sema/Sema.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=147730&r1=147729&r2=147730&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/Sema.h (original)
> +++ cfe/trunk/include/clang/Sema/Sema.h Sat Jan 7 04:52:36 2012
> @@ -1146,8 +1146,6 @@
> DeclSpec &DS,
> MultiTemplateParamsArg TemplateParams);
>
> - StmtResult ActOnVlaStmt(const DeclSpec &DS);
> -
> Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
> AccessSpecifier AS,
> RecordDecl *Record);
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=147730&r1=147729&r2=147730&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Sat Jan 7 04:52:36 2012
> @@ -929,19 +929,33 @@
>
> // We're going to walk down into the type and look for VLA
> // expressions.
> - type = type.getCanonicalType();
> do {
> assert(type->isVariablyModifiedType());
>
> const Type *ty = type.getTypePtr();
> switch (ty->getTypeClass()) {
> +
> + default:
> + // Only sugared types (different from typeof_expr) can reach this point.
> + assert(!type.isCanonical() && "unhandled canonical type!");
> + type = type.getSingleStepDesugaredType(getContext());
> + break;
> +
> + case Type::TypeOfExpr: {
> + // This is the only sugared type requiring special treatment.
> + // Emit typeof expression and we are done.
> + Expr *E = cast<TypeOfExprType>(ty)->getUnderlyingExpr();
> + EmitIgnoredExpr(E);
> + return;
> + }
Do you also need to handle decltype?
- Doug
More information about the cfe-commits
mailing list