mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 03:29:57 +00:00
make codegen reject initializes with designators, like this:
t.c:1:13: error: cannot codegen this designators yet int a[10] = {2, 4, [8]=9, 10}; ^~~~~~~~~~~~~~~~~ llvm-svn: 58220
This commit is contained in:
parent
07d754acf1
commit
084bc32e0d
@ -198,7 +198,7 @@ public:
|
||||
}
|
||||
|
||||
bool hasAnyDesignators() const {
|
||||
return Designations.empty();
|
||||
return !Designations.empty();
|
||||
}
|
||||
|
||||
Designation &CreateDesignation(unsigned Idx) {
|
||||
|
@ -263,7 +263,11 @@ void AggExprEmitter::VisitVAArgExpr(VAArgExpr *VE) {
|
||||
}
|
||||
|
||||
void AggExprEmitter::EmitNonConstInit(InitListExpr *E) {
|
||||
|
||||
if (E->hadDesignators()) {
|
||||
CGF.ErrorUnsupported(E, "initializer list with designators");
|
||||
return;
|
||||
}
|
||||
|
||||
const llvm::PointerType *APType =
|
||||
cast<llvm::PointerType>(DestPtr->getType());
|
||||
const llvm::Type *DestType = APType->getElementType();
|
||||
@ -334,6 +338,11 @@ void AggExprEmitter::EmitNullInitializationToLValue(LValue LV, QualType T) {
|
||||
}
|
||||
|
||||
void AggExprEmitter::VisitInitListExpr(InitListExpr *E) {
|
||||
if (E->hadDesignators()) {
|
||||
CGF.ErrorUnsupported(E, "initializer list with designators");
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: For constant expressions, call into const expr emitter so
|
||||
// that we can emit a memcpy instead of storing the individual
|
||||
// members. This is purely for perf; both codepaths lead to
|
||||
|
@ -315,6 +315,12 @@ public:
|
||||
const llvm::Type* RetTy = CGM.getTypes().ConvertType(ILE->getType());
|
||||
return llvm::Constant::getNullValue(RetTy);
|
||||
}
|
||||
|
||||
// FIXME: We don't codegen or sema designators yet.
|
||||
if (ILE->hadDesignators()) {
|
||||
CGM.ErrorUnsupported(ILE, "initializer list with designators");
|
||||
return llvm::UndefValue::get(ConvertType(ILE->getType()));
|
||||
}
|
||||
|
||||
if (ILE->getType()->isArrayType())
|
||||
return EmitArrayInitialization(ILE);
|
||||
|
@ -154,7 +154,9 @@ public:
|
||||
Value *VisitShuffleVectorExpr(ShuffleVectorExpr *E);
|
||||
Value *VisitMemberExpr(Expr *E) { return EmitLoadOfLValue(E); }
|
||||
Value *VisitExtVectorElementExpr(Expr *E) { return EmitLoadOfLValue(E); }
|
||||
Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { return EmitLoadOfLValue(E); }
|
||||
Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
|
||||
return EmitLoadOfLValue(E);
|
||||
}
|
||||
Value *VisitStringLiteral(Expr *E) { return EmitLValue(E).getAddress(); }
|
||||
Value *VisitPredefinedExpr(Expr *E) { return EmitLValue(E).getAddress(); }
|
||||
|
||||
@ -168,6 +170,11 @@ public:
|
||||
if (!VType)
|
||||
return Visit(E->getInit(0));
|
||||
|
||||
if (E->hadDesignators()) {
|
||||
CGF.ErrorUnsupported(E, "initializer list with designators");
|
||||
return llvm::UndefValue::get(CGF.ConvertType(E->getType()));
|
||||
}
|
||||
|
||||
unsigned NumVectorElements = VType->getNumElements();
|
||||
const llvm::Type *ElementType = VType->getElementType();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user