mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
What if functions can return aggregate values ?
One small step towards multiple return value support. llvm-svn: 47406
This commit is contained in:
parent
7c2d87a9fc
commit
d2142aeb44
@ -179,7 +179,8 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
|
||||
ParamAttrs(0) {
|
||||
SymTab = new ValueSymbolTable();
|
||||
|
||||
assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy)
|
||||
assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy
|
||||
|| getReturnType()->getTypeID() == Type::StructTyID)
|
||||
&& "LLVM functions cannot return aggregate values!");
|
||||
|
||||
// If the function has arguments, mark them as lazily built.
|
||||
|
@ -443,6 +443,7 @@ FunctionType::FunctionType(const Type *Result,
|
||||
ContainedTys = reinterpret_cast<PATypeHandle*>(this+1);
|
||||
NumContainedTys = Params.size() + 1; // + 1 for result type
|
||||
assert((Result->isFirstClassType() || Result == Type::VoidTy ||
|
||||
Result->getTypeID() == Type::StructTyID ||
|
||||
isa<OpaqueType>(Result)) &&
|
||||
"LLVM functions cannot return aggregates");
|
||||
bool isAbstract = Result->isAbstract();
|
||||
|
@ -451,7 +451,8 @@ void Verifier::visitFunction(Function &F) {
|
||||
"# formal arguments must match # of arguments for function type!",
|
||||
&F, FT);
|
||||
Assert1(F.getReturnType()->isFirstClassType() ||
|
||||
F.getReturnType() == Type::VoidTy,
|
||||
F.getReturnType() == Type::VoidTy ||
|
||||
F.getReturnType()->getTypeID() == Type::StructTyID,
|
||||
"Functions cannot return aggregate values!", &F);
|
||||
|
||||
Assert1(!F.isStructReturn() || FT->getReturnType() == Type::VoidTy,
|
||||
@ -1090,7 +1091,9 @@ void Verifier::visitInstruction(Instruction &I) {
|
||||
|
||||
// Check to make sure that only first-class-values are operands to
|
||||
// instructions.
|
||||
Assert1(I.getOperand(i)->getType()->isFirstClassType(),
|
||||
Assert1(I.getOperand(i)->getType()->isFirstClassType()
|
||||
|| (isa<ReturnInst>(I)
|
||||
&& I.getOperand(i)->getType()->getTypeID() == Type::StructTyID),
|
||||
"Instruction operands must be first-class values!", &I);
|
||||
|
||||
if (Function *F = dyn_cast<Function>(I.getOperand(i))) {
|
||||
|
Loading…
Reference in New Issue
Block a user