mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Change CloneFunctionInto to always clone Argument attributes induvidually,
rather than checking if the source and destination have the same number of arguments and copying the attributes over directly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179169 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -7,12 +7,15 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/IR/Argument.h"
|
||||
#include "llvm/IR/Constant.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/Transforms/Utils/Cloning.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
@ -143,4 +146,28 @@ TEST_F(CloneInstruction, Exact) {
|
||||
EXPECT_TRUE(this->clone(SDiv)->isExact());
|
||||
}
|
||||
|
||||
TEST_F(CloneInstruction, Attributes) {
|
||||
Type *ArgTy1[] = { Type::getInt32PtrTy(context) };
|
||||
FunctionType *FT1 = FunctionType::get(Type::getVoidTy(context), ArgTy1, false);
|
||||
|
||||
Function *F1 = Function::Create(FT1, Function::ExternalLinkage);
|
||||
BasicBlock *BB = BasicBlock::Create(context, "", F1);
|
||||
IRBuilder<> Builder(BB);
|
||||
Builder.CreateRetVoid();
|
||||
|
||||
Function *F2 = Function::Create(FT1, Function::ExternalLinkage);
|
||||
|
||||
Attribute::AttrKind AK[] = { Attribute::NoCapture };
|
||||
AttributeSet AS = AttributeSet::get(context, 0, AK);
|
||||
Argument *A = F1->arg_begin();
|
||||
A->addAttr(AS);
|
||||
|
||||
SmallVector<ReturnInst*, 4> Returns;
|
||||
ValueToValueMapTy VMap;
|
||||
VMap[A] = UndefValue::get(A->getType());
|
||||
|
||||
CloneFunctionInto(F2, F1, VMap, false, Returns);
|
||||
EXPECT_FALSE(F2->arg_begin()->hasNoCaptureAttr());
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user