codegen constant data as such. add QualType::isConstant()

llvm-svn: 55603
This commit is contained in:
Nuno Lopes 2008-09-01 11:33:04 +00:00
parent fa558788e7
commit f380a0de07
3 changed files with 14 additions and 0 deletions

View File

@ -131,6 +131,8 @@ public:
bool isRestrictQualified() const {
return (ThePtr & Restrict) ? true : false;
}
bool isConstant(ASTContext& Ctx) const;
/// addConst/addVolatile/addRestrict - add the specified type qual to this
/// QualType.

View File

@ -11,6 +11,7 @@
//
//===----------------------------------------------------------------------===//
#include "clang/AST/ASTContext.h"
#include "clang/AST/Type.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
@ -19,6 +20,16 @@
#include <sstream>
using namespace clang;
bool QualType::isConstant(ASTContext& Ctx) const {
if (isConstQualified())
return true;
if (getTypePtr()->isArrayType())
return Ctx.getAsArrayType(*this)->getElementType().isConstant(Ctx);
return false;
}
void Type::Destroy(ASTContext& C) { delete this; }
void FunctionTypeProto::Destroy(ASTContext& C) {

View File

@ -449,6 +449,7 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
}
GV->setInitializer(Init);
GV->setConstant(D->getType().isConstant(Context));
// FIXME: This is silly; getTypeAlign should just work for incomplete arrays
unsigned Align;