| Index: src/IceGlobalInits.h
|
| diff --git a/src/IceGlobalInits.h b/src/IceGlobalInits.h
|
| index 28e814256aeb87772656165602cbfc52d86008b0..711a563d88430f2cdcedd57ed2fa5f4ffaac417b 100644
|
| --- a/src/IceGlobalInits.h
|
| +++ b/src/IceGlobalInits.h
|
| @@ -21,6 +21,7 @@
|
|
|
| #include "IceDefs.h"
|
| #include "IceGlobalContext.h"
|
| +#include "IceIntrinsics.h"
|
| #include "IceTypes.h"
|
|
|
| #ifdef __clang__
|
| @@ -156,6 +157,32 @@ public:
|
| return verifyLinkageDefault(Ctx);
|
| }
|
|
|
| + /// Validates that the type signature of the function is correct. Returns true
|
| + /// if valid.
|
| + bool validateTypeSignature(const GlobalContext *Ctx) const {
|
| + bool IsIntrinsic;
|
| + if (const Intrinsics::FullIntrinsicInfo *Info =
|
| + getIntrinsicInfo(Ctx, &IsIntrinsic))
|
| + return validateIntrinsicTypeSignature(Info);
|
| + return !IsIntrinsic && validateRegularTypeSignature();
|
| + }
|
| +
|
| + /// Generates an error message describing why validateTypeSignature returns
|
| + /// false.
|
| + IceString getTypeSignatureError(const GlobalContext *Ctx);
|
| +
|
| + /// Returns corresponding PNaCl intrisic information.
|
| + const Intrinsics::FullIntrinsicInfo *
|
| + getIntrinsicInfo(const GlobalContext *Ctx) const {
|
| + bool BadIntrinsic;
|
| + return getIntrinsicInfo(Ctx, &BadIntrinsic);
|
| + }
|
| +
|
| + /// Same as above, except IsIntrinsic is true if the function is intrinsic
|
| + /// (even if not a PNaCl intrinsic).
|
| + const Intrinsics::FullIntrinsicInfo *
|
| + getIntrinsicInfo(const GlobalContext *Ctx, bool *IsIntrinsic) const;
|
| +
|
| private:
|
| const Ice::FuncSigType Signature;
|
| llvm::CallingConv::ID CallingConv;
|
| @@ -173,12 +200,15 @@ private:
|
| }
|
|
|
| bool isIntrinsicName(const GlobalContext *Ctx) const {
|
| - if (!hasName())
|
| - return false;
|
| - bool BadIntrinsic;
|
| - return Ctx->getIntrinsicsInfo().find(getName(), BadIntrinsic) &&
|
| - !BadIntrinsic;
|
| + bool IsIntrinsic;
|
| + getIntrinsicInfo(Ctx, &IsIntrinsic);
|
| + return IsIntrinsic;
|
| }
|
| +
|
| + bool validateRegularTypeSignature() const;
|
| +
|
| + bool validateIntrinsicTypeSignature(
|
| + const Intrinsics::FullIntrinsicInfo *Info) const;
|
| };
|
|
|
| /// Models a global variable declaration, and its initializers.
|
|
|