#include "llvm/Support/LeakDetector.h"
#include "llvm/Support/StringPool.h"
#include "SymbolTableListTraitsImpl.h"
-#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/StringExtras.h"
using namespace llvm;
return getParent()->paramHasAttr(getArgNo()+1, Attribute::NoAlias);
}
+/// hasNoCaptureAttr - Return true if this argument has the nocapture attribute
+/// on it in its containing function.
+bool Argument::hasNoCaptureAttr() const {
+ if (!isa<PointerType>(getType())) return false;
+ return getParent()->paramHasAttr(getArgNo()+1, Attribute::NoCapture);
+}
+
/// hasSRetAttr - Return true if this argument has the sret attribute on
/// it in its containing function.
bool Argument::hasStructRetAttr() const {
const std::string &name, Module *ParentModule)
: GlobalValue(PointerType::getUnqual(Ty),
Value::FunctionVal, 0, 0, Linkage, name) {
+ assert(FunctionType::isValidReturnType(getReturnType()) &&
+ !isa<OpaqueType>(getReturnType()) && "invalid return type");
SymTab = new ValueSymbolTable();
- assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy
- || isa<StructType>(getReturnType()))
- && "LLVM functions cannot return aggregate values!");
-
// If the function has arguments, mark them as lazily built.
if (Ty->getNumParams())
SubclassData = 1; // Set the "has lazy arguments" bit.
return FunctionType::get(ResultTy, ArgTys, IsVarArg);
}
-AttrListPtr Intrinsic::getAttributes(ID id) {
- Attributes Attr = Attribute::None;
-
+/// This defines the "Intrinsic::getAttributes(ID id)" method.
#define GET_INTRINSIC_ATTRIBUTES
#include "llvm/Intrinsics.gen"
#undef GET_INTRINSIC_ATTRIBUTES
- // Intrinsics cannot throw exceptions.
- Attr |= Attribute::NoUnwind;
-
- AttributeWithIndex PAWI = AttributeWithIndex::get(0, Attr);
- return AttrListPtr::get(&PAWI, 1);
-}
-
Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys,
unsigned numTys) {
// There can never be multiple globals with the same name of different types,