mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
ABI: prevent emission of unsupported primitives
This commit is contained in:
committed by
Alessandro Di Federico
parent
602bb62b98
commit
2330d5f4d0
@@ -614,11 +614,20 @@ TCC::tryConvertingReturnValue(RFTReturnValues Registers) {
|
||||
// TODO: sadly this discards type information from the registers, look
|
||||
// into preserving it at least partially.
|
||||
uint64_t PointerSize = model::ABI::getPointerSize(ABI.ABI());
|
||||
return model::QualifiedType{
|
||||
Bucket.getPrimitiveType(model::PrimitiveTypeKind::Values::Generic,
|
||||
PointerSize * Ordered.size()),
|
||||
{}
|
||||
};
|
||||
uint64_t PrimitiveSize = Ordered.size() * PointerSize;
|
||||
if (llvm::is_contained(ABI.ScalarTypes(), PrimitiveSize)) {
|
||||
return model::QualifiedType{
|
||||
Bucket.getPrimitiveType(model::PrimitiveTypeKind::Values::Generic,
|
||||
PrimitiveSize),
|
||||
{}
|
||||
};
|
||||
} else {
|
||||
revng_log(Log,
|
||||
"The primitive return value ("
|
||||
<< Ordered.size() << " bytes) is not a valid scalar under "
|
||||
<< model::ABI::getName(ABI.ABI()) << ":\n");
|
||||
return std::nullopt;
|
||||
}
|
||||
} else {
|
||||
// It could be either a struct or a scalar, go the conservative route
|
||||
// and make a struct for it.
|
||||
|
||||
Reference in New Issue
Block a user