mirror of
https://github.com/opnsense/src.git
synced 2026-06-04 14:26:03 -04:00
Merge llvm-project release/19.x llvmorg-19.1.2-0-g7ba7d8e2f7b6
This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvm-project release/19.x llvmorg-19.1.2-0-g7ba7d8e2f7b6, a.k.a. 19.1.2 release. PR: 280562 MFC after: 1 month
This commit is contained in:
commit
5deeebd8c6
37 changed files with 260 additions and 350 deletions
|
|
@ -64,6 +64,10 @@
|
|||
#ifndef EXPRESSION_TRAIT
|
||||
#define EXPRESSION_TRAIT(I,E,K) KEYWORD(I,K)
|
||||
#endif
|
||||
#ifndef TRANSFORM_TYPE_TRAIT_DEF
|
||||
#define TRANSFORM_TYPE_TRAIT_DEF(K, Trait) KEYWORD(__##Trait, KEYCXX)
|
||||
#endif
|
||||
|
||||
#ifndef ALIAS
|
||||
#define ALIAS(X,Y,Z)
|
||||
#endif
|
||||
|
|
@ -534,7 +538,6 @@ TYPE_TRAIT_1(__has_unique_object_representations,
|
|||
TYPE_TRAIT_2(__is_layout_compatible, IsLayoutCompatible, KEYCXX)
|
||||
TYPE_TRAIT_2(__is_pointer_interconvertible_base_of, IsPointerInterconvertibleBaseOf, KEYCXX)
|
||||
|
||||
#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) KEYWORD(__##Trait, KEYCXX)
|
||||
#include "clang/Basic/TransformTypeTraits.def"
|
||||
|
||||
// Clang-only C++ Type Traits
|
||||
|
|
|
|||
|
|
@ -314,7 +314,8 @@ CodeGenTypes::arrangeCXXMethodDeclaration(const CXXMethodDecl *MD) {
|
|||
|
||||
if (MD->isImplicitObjectMemberFunction()) {
|
||||
// The abstract case is perfectly fine.
|
||||
const CXXRecordDecl *ThisType = TheCXXABI.getThisArgumentTypeForMethod(MD);
|
||||
const CXXRecordDecl *ThisType =
|
||||
getCXXABI().getThisArgumentTypeForMethod(MD);
|
||||
return arrangeCXXMethodType(ThisType, prototype.getTypePtr(), MD);
|
||||
}
|
||||
|
||||
|
|
@ -337,7 +338,7 @@ CodeGenTypes::arrangeCXXStructorDeclaration(GlobalDecl GD) {
|
|||
SmallVector<CanQualType, 16> argTypes;
|
||||
SmallVector<FunctionProtoType::ExtParameterInfo, 16> paramInfos;
|
||||
|
||||
const CXXRecordDecl *ThisType = TheCXXABI.getThisArgumentTypeForMethod(GD);
|
||||
const CXXRecordDecl *ThisType = getCXXABI().getThisArgumentTypeForMethod(GD);
|
||||
argTypes.push_back(DeriveThisType(ThisType, MD));
|
||||
|
||||
bool PassParams = true;
|
||||
|
|
@ -356,7 +357,7 @@ CodeGenTypes::arrangeCXXStructorDeclaration(GlobalDecl GD) {
|
|||
appendParameterTypes(*this, argTypes, paramInfos, FTP);
|
||||
|
||||
CGCXXABI::AddedStructorArgCounts AddedArgs =
|
||||
TheCXXABI.buildStructorSignature(GD, argTypes);
|
||||
getCXXABI().buildStructorSignature(GD, argTypes);
|
||||
if (!paramInfos.empty()) {
|
||||
// Note: prefix implies after the first param.
|
||||
if (AddedArgs.Prefix)
|
||||
|
|
@ -372,11 +373,10 @@ CodeGenTypes::arrangeCXXStructorDeclaration(GlobalDecl GD) {
|
|||
: RequiredArgs::All);
|
||||
|
||||
FunctionType::ExtInfo extInfo = FTP->getExtInfo();
|
||||
CanQualType resultType = TheCXXABI.HasThisReturn(GD)
|
||||
? argTypes.front()
|
||||
: TheCXXABI.hasMostDerivedReturn(GD)
|
||||
? CGM.getContext().VoidPtrTy
|
||||
: Context.VoidTy;
|
||||
CanQualType resultType = getCXXABI().HasThisReturn(GD) ? argTypes.front()
|
||||
: getCXXABI().hasMostDerivedReturn(GD)
|
||||
? CGM.getContext().VoidPtrTy
|
||||
: Context.VoidTy;
|
||||
return arrangeLLVMFunctionInfo(resultType, FnInfoOpts::IsInstanceMethod,
|
||||
argTypes, extInfo, paramInfos, required);
|
||||
}
|
||||
|
|
@ -437,11 +437,10 @@ CodeGenTypes::arrangeCXXConstructorCall(const CallArgList &args,
|
|||
: RequiredArgs::All;
|
||||
|
||||
GlobalDecl GD(D, CtorKind);
|
||||
CanQualType ResultType = TheCXXABI.HasThisReturn(GD)
|
||||
? ArgTypes.front()
|
||||
: TheCXXABI.hasMostDerivedReturn(GD)
|
||||
? CGM.getContext().VoidPtrTy
|
||||
: Context.VoidTy;
|
||||
CanQualType ResultType = getCXXABI().HasThisReturn(GD) ? ArgTypes.front()
|
||||
: getCXXABI().hasMostDerivedReturn(GD)
|
||||
? CGM.getContext().VoidPtrTy
|
||||
: Context.VoidTy;
|
||||
|
||||
FunctionType::ExtInfo Info = FPT->getExtInfo();
|
||||
llvm::SmallVector<FunctionProtoType::ExtParameterInfo, 16> ParamInfos;
|
||||
|
|
@ -806,7 +805,7 @@ const CGFunctionInfo &CodeGenTypes::arrangeLLVMFunctionInfo(
|
|||
} else if (info.getCC() == CC_Swift || info.getCC() == CC_SwiftAsync) {
|
||||
swiftcall::computeABIInfo(CGM, *FI);
|
||||
} else {
|
||||
getABIInfo().computeInfo(*FI);
|
||||
CGM.getABIInfo().computeInfo(*FI);
|
||||
}
|
||||
|
||||
// Loop over all of the computed argument and return value info. If any of
|
||||
|
|
@ -6022,6 +6021,6 @@ RValue CodeGenFunction::EmitVAArg(VAArgExpr *VE, Address &VAListAddr,
|
|||
: EmitVAListRef(VE->getSubExpr());
|
||||
QualType Ty = VE->getType();
|
||||
if (VE->isMicrosoftABI())
|
||||
return CGM.getTypes().getABIInfo().EmitMSVAArg(*this, VAListAddr, Ty, Slot);
|
||||
return CGM.getTypes().getABIInfo().EmitVAArg(*this, VAListAddr, Ty, Slot);
|
||||
return CGM.getABIInfo().EmitMSVAArg(*this, VAListAddr, Ty, Slot);
|
||||
return CGM.getABIInfo().EmitVAArg(*this, VAListAddr, Ty, Slot);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ CodeGenModule::GetNonVirtualBaseClassOffset(const CXXRecordDecl *ClassDecl,
|
|||
return nullptr;
|
||||
|
||||
llvm::Type *PtrDiffTy =
|
||||
Types.ConvertType(getContext().getPointerDiffType());
|
||||
getTypes().ConvertType(getContext().getPointerDiffType());
|
||||
|
||||
return llvm::ConstantInt::get(PtrDiffTy, Offset.getQuantity());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1052,6 +1052,8 @@ public:
|
|||
return Visit(E->getBase());
|
||||
}
|
||||
const Expr *VisitCastExpr(const CastExpr *E) {
|
||||
if (E->getCastKind() == CK_LValueToRValue)
|
||||
return IsExpectedRecordDecl(E) ? E : nullptr;
|
||||
return Visit(E->getSubExpr());
|
||||
}
|
||||
const Expr *VisitParenExpr(const ParenExpr *E) {
|
||||
|
|
@ -1119,19 +1121,15 @@ llvm::Value *CodeGenFunction::EmitCountedByFieldExpr(
|
|||
return nullptr;
|
||||
|
||||
llvm::Value *Res = nullptr;
|
||||
if (const auto *DRE = dyn_cast<DeclRefExpr>(StructBase)) {
|
||||
Res = EmitDeclRefLValue(DRE).getPointer(*this);
|
||||
Res = Builder.CreateAlignedLoad(ConvertType(DRE->getType()), Res,
|
||||
getPointerAlign(), "dre.load");
|
||||
} else if (const MemberExpr *ME = dyn_cast<MemberExpr>(StructBase)) {
|
||||
LValue LV = EmitMemberExpr(ME);
|
||||
Address Addr = LV.getAddress();
|
||||
Res = Addr.emitRawPointer(*this);
|
||||
} else if (StructBase->getType()->isPointerType()) {
|
||||
if (StructBase->getType()->isPointerType()) {
|
||||
LValueBaseInfo BaseInfo;
|
||||
TBAAAccessInfo TBAAInfo;
|
||||
Address Addr = EmitPointerWithAlignment(StructBase, &BaseInfo, &TBAAInfo);
|
||||
Res = Addr.emitRawPointer(*this);
|
||||
} else if (StructBase->isLValue()) {
|
||||
LValue LV = EmitLValue(StructBase);
|
||||
Address Addr = LV.getAddress();
|
||||
Res = Addr.emitRawPointer(*this);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -343,10 +343,11 @@ CodeGenModule::CodeGenModule(ASTContext &C,
|
|||
: Context(C), LangOpts(C.getLangOpts()), FS(FS), HeaderSearchOpts(HSO),
|
||||
PreprocessorOpts(PPO), CodeGenOpts(CGO), TheModule(M), Diags(diags),
|
||||
Target(C.getTargetInfo()), ABI(createCXXABI(*this)),
|
||||
VMContext(M.getContext()), Types(*this), VTables(*this),
|
||||
VMContext(M.getContext()), VTables(*this),
|
||||
SanitizerMD(new SanitizerMetadata(*this)) {
|
||||
|
||||
// Initialize the type cache.
|
||||
Types.reset(new CodeGenTypes(*this));
|
||||
llvm::LLVMContext &LLVMContext = M.getContext();
|
||||
VoidTy = llvm::Type::getVoidTy(LLVMContext);
|
||||
Int8Ty = llvm::Type::getInt8Ty(LLVMContext);
|
||||
|
|
@ -405,7 +406,7 @@ CodeGenModule::CodeGenModule(ASTContext &C,
|
|||
if (LangOpts.Sanitize.has(SanitizerKind::Thread) ||
|
||||
(!CodeGenOpts.RelaxedAliasing && CodeGenOpts.OptimizationLevel > 0))
|
||||
TBAA.reset(new CodeGenTBAA(Context, getTypes(), TheModule, CodeGenOpts,
|
||||
getLangOpts(), getCXXABI().getMangleContext()));
|
||||
getLangOpts()));
|
||||
|
||||
// If debug info or coverage generation is enabled, create the CGDebugInfo
|
||||
// object.
|
||||
|
|
@ -1452,12 +1453,12 @@ void CodeGenModule::EmitBackendOptionsMetadata(
|
|||
|
||||
void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
|
||||
// Make sure that this type is translated.
|
||||
Types.UpdateCompletedType(TD);
|
||||
getTypes().UpdateCompletedType(TD);
|
||||
}
|
||||
|
||||
void CodeGenModule::RefreshTypeCacheForClass(const CXXRecordDecl *RD) {
|
||||
// Make sure that this type is translated.
|
||||
Types.RefreshTypeCacheForClass(RD);
|
||||
getTypes().RefreshTypeCacheForClass(RD);
|
||||
}
|
||||
|
||||
llvm::MDNode *CodeGenModule::getTBAATypeInfo(QualType QTy) {
|
||||
|
|
@ -5376,6 +5377,10 @@ void CodeGenModule::maybeSetTrivialComdat(const Decl &D,
|
|||
GO.setComdat(TheModule.getOrInsertComdat(GO.getName()));
|
||||
}
|
||||
|
||||
const ABIInfo &CodeGenModule::getABIInfo() {
|
||||
return getTargetCodeGenInfo().getABIInfo();
|
||||
}
|
||||
|
||||
/// Pass IsTentative as true if you want to create a tentative definition.
|
||||
void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D,
|
||||
bool IsTentative) {
|
||||
|
|
@ -7784,7 +7789,5 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) {
|
|||
|
||||
NewBuilder->WeakRefReferences = std::move(WeakRefReferences);
|
||||
|
||||
NewBuilder->TBAA = std::move(TBAA);
|
||||
|
||||
NewBuilder->ABI->MangleCtx = std::move(ABI->MangleCtx);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -320,7 +320,7 @@ private:
|
|||
// This should not be moved earlier, since its initialization depends on some
|
||||
// of the previous reference members being already initialized and also checks
|
||||
// if TheTargetCodeGenInfo is NULL
|
||||
CodeGenTypes Types;
|
||||
std::unique_ptr<CodeGenTypes> Types;
|
||||
|
||||
/// Holds information about C++ vtables.
|
||||
CodeGenVTables VTables;
|
||||
|
|
@ -776,6 +776,7 @@ public:
|
|||
bool supportsCOMDAT() const;
|
||||
void maybeSetTrivialComdat(const Decl &D, llvm::GlobalObject &GO);
|
||||
|
||||
const ABIInfo &getABIInfo();
|
||||
CGCXXABI &getCXXABI() const { return *ABI; }
|
||||
llvm::LLVMContext &getLLVMContext() { return VMContext; }
|
||||
|
||||
|
|
@ -783,7 +784,7 @@ public:
|
|||
|
||||
const TargetCodeGenInfo &getTargetCodeGenInfo();
|
||||
|
||||
CodeGenTypes &getTypes() { return Types; }
|
||||
CodeGenTypes &getTypes() { return *Types; }
|
||||
|
||||
CodeGenVTables &getVTables() { return VTables; }
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "CodeGenTBAA.h"
|
||||
#include "ABIInfoImpl.h"
|
||||
#include "CGCXXABI.h"
|
||||
#include "CGRecordLayout.h"
|
||||
#include "CodeGenTypes.h"
|
||||
#include "clang/AST/ASTContext.h"
|
||||
|
|
@ -36,10 +37,10 @@ using namespace CodeGen;
|
|||
|
||||
CodeGenTBAA::CodeGenTBAA(ASTContext &Ctx, CodeGenTypes &CGTypes,
|
||||
llvm::Module &M, const CodeGenOptions &CGO,
|
||||
const LangOptions &Features, MangleContext &MContext)
|
||||
const LangOptions &Features)
|
||||
: Context(Ctx), CGTypes(CGTypes), Module(M), CodeGenOpts(CGO),
|
||||
Features(Features), MContext(MContext), MDHelper(M.getContext()),
|
||||
Root(nullptr), Char(nullptr) {}
|
||||
Features(Features), MDHelper(M.getContext()), Root(nullptr),
|
||||
Char(nullptr) {}
|
||||
|
||||
CodeGenTBAA::~CodeGenTBAA() {
|
||||
}
|
||||
|
|
@ -256,7 +257,8 @@ llvm::MDNode *CodeGenTBAA::getTypeInfoHelper(const Type *Ty) {
|
|||
|
||||
SmallString<256> OutName;
|
||||
llvm::raw_svector_ostream Out(OutName);
|
||||
MContext.mangleCanonicalTypeName(QualType(ETy, 0), Out);
|
||||
CGTypes.getCXXABI().getMangleContext().mangleCanonicalTypeName(
|
||||
QualType(ETy, 0), Out);
|
||||
return createScalarTypeNode(OutName, getChar(), Size);
|
||||
}
|
||||
|
||||
|
|
@ -481,7 +483,8 @@ llvm::MDNode *CodeGenTBAA::getBaseTypeInfoHelper(const Type *Ty) {
|
|||
if (Features.CPlusPlus) {
|
||||
// Don't use the mangler for C code.
|
||||
llvm::raw_svector_ostream Out(OutName);
|
||||
MContext.mangleCanonicalTypeName(QualType(Ty, 0), Out);
|
||||
CGTypes.getCXXABI().getMangleContext().mangleCanonicalTypeName(
|
||||
QualType(Ty, 0), Out);
|
||||
} else {
|
||||
OutName = RD->getName();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ namespace clang {
|
|||
class ASTContext;
|
||||
class CodeGenOptions;
|
||||
class LangOptions;
|
||||
class MangleContext;
|
||||
class QualType;
|
||||
class Type;
|
||||
|
||||
|
|
@ -120,7 +119,6 @@ class CodeGenTBAA {
|
|||
llvm::Module &Module;
|
||||
const CodeGenOptions &CodeGenOpts;
|
||||
const LangOptions &Features;
|
||||
MangleContext &MContext;
|
||||
|
||||
// MDHelper - Helper for creating metadata.
|
||||
llvm::MDBuilder MDHelper;
|
||||
|
|
@ -174,8 +172,7 @@ class CodeGenTBAA {
|
|||
|
||||
public:
|
||||
CodeGenTBAA(ASTContext &Ctx, CodeGenTypes &CGTypes, llvm::Module &M,
|
||||
const CodeGenOptions &CGO, const LangOptions &Features,
|
||||
MangleContext &MContext);
|
||||
const CodeGenOptions &CGO, const LangOptions &Features);
|
||||
~CodeGenTBAA();
|
||||
|
||||
/// getTypeInfo - Get metadata used to describe accesses to objects of the
|
||||
|
|
|
|||
|
|
@ -30,9 +30,8 @@ using namespace clang;
|
|||
using namespace CodeGen;
|
||||
|
||||
CodeGenTypes::CodeGenTypes(CodeGenModule &cgm)
|
||||
: CGM(cgm), Context(cgm.getContext()), TheModule(cgm.getModule()),
|
||||
Target(cgm.getTarget()), TheCXXABI(cgm.getCXXABI()),
|
||||
TheABIInfo(cgm.getTargetCodeGenInfo().getABIInfo()) {
|
||||
: CGM(cgm), Context(cgm.getContext()), TheModule(cgm.getModule()),
|
||||
Target(cgm.getTarget()) {
|
||||
SkippedLayout = false;
|
||||
LongDoubleReferenced = false;
|
||||
}
|
||||
|
|
@ -43,6 +42,8 @@ CodeGenTypes::~CodeGenTypes() {
|
|||
delete &*I++;
|
||||
}
|
||||
|
||||
CGCXXABI &CodeGenTypes::getCXXABI() const { return getCGM().getCXXABI(); }
|
||||
|
||||
const CodeGenOptions &CodeGenTypes::getCodeGenOpts() const {
|
||||
return CGM.getCodeGenOpts();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,11 +57,6 @@ class CodeGenTypes {
|
|||
ASTContext &Context;
|
||||
llvm::Module &TheModule;
|
||||
const TargetInfo &Target;
|
||||
CGCXXABI &TheCXXABI;
|
||||
|
||||
// This should not be moved earlier, since its initialization depends on some
|
||||
// of the previous reference members being already initialized
|
||||
const ABIInfo &TheABIInfo;
|
||||
|
||||
/// The opaque type map for Objective-C interfaces. All direct
|
||||
/// manipulation is done by the runtime interfaces, which are
|
||||
|
|
@ -106,9 +101,8 @@ public:
|
|||
}
|
||||
CodeGenModule &getCGM() const { return CGM; }
|
||||
ASTContext &getContext() const { return Context; }
|
||||
const ABIInfo &getABIInfo() const { return TheABIInfo; }
|
||||
const TargetInfo &getTarget() const { return Target; }
|
||||
CGCXXABI &getCXXABI() const { return TheCXXABI; }
|
||||
CGCXXABI &getCXXABI() const;
|
||||
llvm::LLVMContext &getLLVMContext() { return TheModule.getContext(); }
|
||||
const CodeGenOptions &getCodeGenOpts() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -1111,7 +1111,7 @@ static bool isTrivialForMSVC(const CXXRecordDecl *RD, QualType Ty,
|
|||
const Type *Base = nullptr;
|
||||
uint64_t NumElts = 0;
|
||||
if (CGM.getTarget().getTriple().isAArch64() &&
|
||||
CGM.getTypes().getABIInfo().isHomogeneousAggregate(Ty, Base, NumElts) &&
|
||||
CGM.getABIInfo().isHomogeneousAggregate(Ty, Base, NumElts) &&
|
||||
isa<VectorType>(Base)) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -189,25 +189,29 @@ private:
|
|||
next();
|
||||
}
|
||||
|
||||
for (bool SeenTernaryOperator = false; CurrentToken;) {
|
||||
for (bool SeenTernaryOperator = false, MaybeAngles = true; CurrentToken;) {
|
||||
const bool InExpr = Contexts[Contexts.size() - 2].IsExpression;
|
||||
if (CurrentToken->is(tok::greater)) {
|
||||
const auto *Next = CurrentToken->Next;
|
||||
// Try to do a better job at looking for ">>" within the condition of
|
||||
// a statement. Conservatively insert spaces between consecutive ">"
|
||||
// tokens to prevent splitting right bitshift operators and potentially
|
||||
// altering program semantics. This check is overly conservative and
|
||||
// will prevent spaces from being inserted in select nested template
|
||||
// parameter cases, but should not alter program semantics.
|
||||
if (Next && Next->is(tok::greater) &&
|
||||
Left->ParentBracket != tok::less &&
|
||||
CurrentToken->getStartOfNonWhitespace() ==
|
||||
Next->getStartOfNonWhitespace().getLocWithOffset(-1)) {
|
||||
return false;
|
||||
}
|
||||
if (InExpr && SeenTernaryOperator &&
|
||||
(!Next || !Next->isOneOf(tok::l_paren, tok::l_brace))) {
|
||||
return false;
|
||||
if (CurrentToken->isNot(TT_TemplateCloser)) {
|
||||
// Try to do a better job at looking for ">>" within the condition of
|
||||
// a statement. Conservatively insert spaces between consecutive ">"
|
||||
// tokens to prevent splitting right shift operators and potentially
|
||||
// altering program semantics. This check is overly conservative and
|
||||
// will prevent spaces from being inserted in select nested template
|
||||
// parameter cases, but should not alter program semantics.
|
||||
if (Next && Next->is(tok::greater) &&
|
||||
Left->ParentBracket != tok::less &&
|
||||
CurrentToken->getStartOfNonWhitespace() ==
|
||||
Next->getStartOfNonWhitespace().getLocWithOffset(-1)) {
|
||||
return false;
|
||||
}
|
||||
if (InExpr && SeenTernaryOperator &&
|
||||
(!Next || !Next->isOneOf(tok::l_paren, tok::l_brace))) {
|
||||
return false;
|
||||
}
|
||||
if (!MaybeAngles)
|
||||
return false;
|
||||
}
|
||||
Left->MatchingParen = CurrentToken;
|
||||
CurrentToken->MatchingParen = Left;
|
||||
|
|
@ -243,11 +247,11 @@ private:
|
|||
// operator that was misinterpreted because we are parsing template
|
||||
// parameters.
|
||||
// FIXME: This is getting out of hand, write a decent parser.
|
||||
if (InExpr && !Line.startsWith(tok::kw_template) &&
|
||||
if (MaybeAngles && InExpr && !Line.startsWith(tok::kw_template) &&
|
||||
Prev.is(TT_BinaryOperator)) {
|
||||
const auto Precedence = Prev.getPrecedence();
|
||||
if (Precedence > prec::Conditional && Precedence < prec::Relational)
|
||||
return false;
|
||||
MaybeAngles = false;
|
||||
}
|
||||
if (Prev.isOneOf(tok::question, tok::colon) && !Style.isProto())
|
||||
SeenTernaryOperator = true;
|
||||
|
|
@ -1615,7 +1619,7 @@ private:
|
|||
return false;
|
||||
break;
|
||||
case tok::greater:
|
||||
if (Style.Language != FormatStyle::LK_TextProto)
|
||||
if (Style.Language != FormatStyle::LK_TextProto && Tok->is(TT_Unknown))
|
||||
Tok->setType(TT_BinaryOperator);
|
||||
if (Tok->Previous && Tok->Previous->is(TT_TemplateCloser))
|
||||
Tok->SpacesRequiredBefore = 1;
|
||||
|
|
|
|||
|
|
@ -2131,6 +2131,11 @@ void UnwrappedLineParser::parseStructuralElement(
|
|||
return;
|
||||
}
|
||||
break;
|
||||
case tok::greater:
|
||||
nextToken();
|
||||
if (FormatTok->is(tok::l_brace))
|
||||
FormatTok->Previous->setFinalizedType(TT_TemplateCloser);
|
||||
break;
|
||||
default:
|
||||
nextToken();
|
||||
break;
|
||||
|
|
@ -2551,7 +2556,7 @@ bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType) {
|
|||
parseChildBlock();
|
||||
break;
|
||||
case tok::r_paren: {
|
||||
const auto *Prev = LeftParen->Previous;
|
||||
auto *Prev = LeftParen->Previous;
|
||||
if (!MightBeStmtExpr && !MightBeFoldExpr && !Line->InMacroBody &&
|
||||
Style.RemoveParentheses > FormatStyle::RPS_Leave) {
|
||||
const auto *Next = Tokens->peekNextToken();
|
||||
|
|
@ -2575,9 +2580,13 @@ bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType) {
|
|||
FormatTok->Optional = true;
|
||||
}
|
||||
}
|
||||
if (Prev && Prev->is(TT_TypenameMacro)) {
|
||||
LeftParen->setFinalizedType(TT_TypeDeclarationParen);
|
||||
FormatTok->setFinalizedType(TT_TypeDeclarationParen);
|
||||
if (Prev) {
|
||||
if (Prev->is(TT_TypenameMacro)) {
|
||||
LeftParen->setFinalizedType(TT_TypeDeclarationParen);
|
||||
FormatTok->setFinalizedType(TT_TypeDeclarationParen);
|
||||
} else if (Prev->is(tok::greater) && FormatTok->Previous == LeftParen) {
|
||||
Prev->setFinalizedType(TT_TemplateCloser);
|
||||
}
|
||||
}
|
||||
nextToken();
|
||||
return SeenEqual;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ unsigned char _InterlockedCompareExchange128_rel(__int64 volatile *_Destination,
|
|||
__int64 *_ComparandResult);
|
||||
#endif
|
||||
|
||||
#ifdef __x86_64__ && !defined(__arm64ec__)
|
||||
#if defined(__x86_64__) && !defined(__arm64ec__)
|
||||
unsigned __int64 _umul128(unsigned __int64, unsigned __int64,
|
||||
unsigned __int64 *);
|
||||
unsigned __int64 __shiftleft128(unsigned __int64 _LowPart,
|
||||
|
|
|
|||
|
|
@ -8359,7 +8359,9 @@ vec_min(__vector double __a, __vector double __b) {
|
|||
|
||||
static inline __ATTRS_ai __vector unsigned char
|
||||
vec_add_u128(__vector unsigned char __a, __vector unsigned char __b) {
|
||||
return (__vector unsigned char)((__int128)__a + (__int128)__b);
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
((__int128)__a + (__int128)__b);
|
||||
}
|
||||
|
||||
/*-- vec_addc ---------------------------------------------------------------*/
|
||||
|
|
@ -8389,6 +8391,7 @@ vec_addc(__vector unsigned long long __a, __vector unsigned long long __b) {
|
|||
static inline __ATTRS_ai __vector unsigned char
|
||||
vec_addc_u128(__vector unsigned char __a, __vector unsigned char __b) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vaccq((unsigned __int128)__a, (unsigned __int128)__b);
|
||||
}
|
||||
|
||||
|
|
@ -8398,6 +8401,7 @@ static inline __ATTRS_ai __vector unsigned char
|
|||
vec_adde_u128(__vector unsigned char __a, __vector unsigned char __b,
|
||||
__vector unsigned char __c) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vacq((unsigned __int128)__a, (unsigned __int128)__b,
|
||||
(unsigned __int128)__c);
|
||||
}
|
||||
|
|
@ -8408,6 +8412,7 @@ static inline __ATTRS_ai __vector unsigned char
|
|||
vec_addec_u128(__vector unsigned char __a, __vector unsigned char __b,
|
||||
__vector unsigned char __c) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vacccq((unsigned __int128)__a, (unsigned __int128)__b,
|
||||
(unsigned __int128)__c);
|
||||
}
|
||||
|
|
@ -8483,7 +8488,9 @@ vec_gfmsum(__vector unsigned int __a, __vector unsigned int __b) {
|
|||
static inline __ATTRS_o_ai __vector unsigned char
|
||||
vec_gfmsum_128(__vector unsigned long long __a,
|
||||
__vector unsigned long long __b) {
|
||||
return (__vector unsigned char)__builtin_s390_vgfmg(__a, __b);
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vgfmg(__a, __b);
|
||||
}
|
||||
|
||||
/*-- vec_gfmsum_accum -------------------------------------------------------*/
|
||||
|
|
@ -8513,6 +8520,7 @@ vec_gfmsum_accum_128(__vector unsigned long long __a,
|
|||
__vector unsigned long long __b,
|
||||
__vector unsigned char __c) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vgfmag(__a, __b, (unsigned __int128)__c);
|
||||
}
|
||||
|
||||
|
|
@ -8810,6 +8818,7 @@ vec_msum_u128(__vector unsigned long long __a, __vector unsigned long long __b,
|
|||
|
||||
#define vec_msum_u128(X, Y, Z, W) \
|
||||
((__typeof__((vec_msum_u128)((X), (Y), (Z), (W)))) \
|
||||
(unsigned __int128 __attribute__((__vector_size__(16)))) \
|
||||
__builtin_s390_vmslg((X), (Y), (unsigned __int128)(Z), (W)))
|
||||
#endif
|
||||
|
||||
|
|
@ -8817,7 +8826,9 @@ vec_msum_u128(__vector unsigned long long __a, __vector unsigned long long __b,
|
|||
|
||||
static inline __ATTRS_ai __vector unsigned char
|
||||
vec_sub_u128(__vector unsigned char __a, __vector unsigned char __b) {
|
||||
return (__vector unsigned char)((__int128)__a - (__int128)__b);
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
((__int128)__a - (__int128)__b);
|
||||
}
|
||||
|
||||
/*-- vec_subc ---------------------------------------------------------------*/
|
||||
|
|
@ -8847,6 +8858,7 @@ vec_subc(__vector unsigned long long __a, __vector unsigned long long __b) {
|
|||
static inline __ATTRS_ai __vector unsigned char
|
||||
vec_subc_u128(__vector unsigned char __a, __vector unsigned char __b) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vscbiq((unsigned __int128)__a, (unsigned __int128)__b);
|
||||
}
|
||||
|
||||
|
|
@ -8856,6 +8868,7 @@ static inline __ATTRS_ai __vector unsigned char
|
|||
vec_sube_u128(__vector unsigned char __a, __vector unsigned char __b,
|
||||
__vector unsigned char __c) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vsbiq((unsigned __int128)__a, (unsigned __int128)__b,
|
||||
(unsigned __int128)__c);
|
||||
}
|
||||
|
|
@ -8866,6 +8879,7 @@ static inline __ATTRS_ai __vector unsigned char
|
|||
vec_subec_u128(__vector unsigned char __a, __vector unsigned char __b,
|
||||
__vector unsigned char __c) {
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vsbcbiq((unsigned __int128)__a, (unsigned __int128)__b,
|
||||
(unsigned __int128)__c);
|
||||
}
|
||||
|
|
@ -8886,12 +8900,16 @@ vec_sum2(__vector unsigned int __a, __vector unsigned int __b) {
|
|||
|
||||
static inline __ATTRS_o_ai __vector unsigned char
|
||||
vec_sum_u128(__vector unsigned int __a, __vector unsigned int __b) {
|
||||
return (__vector unsigned char)__builtin_s390_vsumqf(__a, __b);
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vsumqf(__a, __b);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai __vector unsigned char
|
||||
vec_sum_u128(__vector unsigned long long __a, __vector unsigned long long __b) {
|
||||
return (__vector unsigned char)__builtin_s390_vsumqg(__a, __b);
|
||||
return (__vector unsigned char)
|
||||
(unsigned __int128 __attribute__((__vector_size__(16))))
|
||||
__builtin_s390_vsumqg(__a, __b);
|
||||
}
|
||||
|
||||
/*-- vec_sum4 ---------------------------------------------------------------*/
|
||||
|
|
|
|||
|
|
@ -1602,6 +1602,34 @@ static bool isTargetVariantEnvironment(const TargetInfo &TI,
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool IsBuiltinTrait(Token &Tok) {
|
||||
|
||||
#define TYPE_TRAIT_1(Spelling, Name, Key) \
|
||||
case tok::kw_##Spelling: \
|
||||
return true;
|
||||
#define TYPE_TRAIT_2(Spelling, Name, Key) \
|
||||
case tok::kw_##Spelling: \
|
||||
return true;
|
||||
#define TYPE_TRAIT_N(Spelling, Name, Key) \
|
||||
case tok::kw_##Spelling: \
|
||||
return true;
|
||||
#define ARRAY_TYPE_TRAIT(Spelling, Name, Key) \
|
||||
case tok::kw_##Spelling: \
|
||||
return true;
|
||||
#define EXPRESSION_TRAIT(Spelling, Name, Key) \
|
||||
case tok::kw_##Spelling: \
|
||||
return true;
|
||||
#define TRANSFORM_TYPE_TRAIT_DEF(K, Spelling) \
|
||||
case tok::kw___##Spelling: \
|
||||
return true;
|
||||
|
||||
switch (Tok.getKind()) {
|
||||
default:
|
||||
return false;
|
||||
#include "clang/Basic/TokenKinds.def"
|
||||
}
|
||||
}
|
||||
|
||||
/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
|
||||
/// as a builtin macro, handle it and return the next token as 'Tok'.
|
||||
void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
|
||||
|
|
@ -1798,25 +1826,11 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
|
|||
getTargetInfo().getTargetOpts().FeatureMap);
|
||||
}
|
||||
return true;
|
||||
} else if (II->getTokenID() != tok::identifier ||
|
||||
II->hasRevertedTokenIDToIdentifier()) {
|
||||
// Treat all keywords that introduce a custom syntax of the form
|
||||
//
|
||||
// '__some_keyword' '(' [...] ')'
|
||||
//
|
||||
// as being "builtin functions", even if the syntax isn't a valid
|
||||
// function call (for example, because the builtin takes a type
|
||||
// argument).
|
||||
if (II->getName().starts_with("__builtin_") ||
|
||||
II->getName().starts_with("__is_") ||
|
||||
II->getName().starts_with("__has_"))
|
||||
return true;
|
||||
return llvm::StringSwitch<bool>(II->getName())
|
||||
.Case("__array_rank", true)
|
||||
.Case("__array_extent", true)
|
||||
#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) .Case("__" #Trait, true)
|
||||
#include "clang/Basic/TransformTypeTraits.def"
|
||||
.Default(false);
|
||||
} else if (IsBuiltinTrait(Tok)) {
|
||||
return true;
|
||||
} else if (II->getTokenID() != tok::identifier &&
|
||||
II->getName().starts_with("__builtin_")) {
|
||||
return true;
|
||||
} else {
|
||||
return llvm::StringSwitch<bool>(II->getName())
|
||||
// Report builtin templates as being builtins.
|
||||
|
|
|
|||
|
|
@ -6922,8 +6922,7 @@ ExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
|
|||
}
|
||||
|
||||
if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))
|
||||
if (!isa<RequiresExprBodyDecl>(CurContext) &&
|
||||
Method->isImplicitObjectMemberFunction())
|
||||
if (Method->isImplicitObjectMemberFunction())
|
||||
return ExprError(Diag(LParenLoc, diag::err_member_call_without_object)
|
||||
<< Fn->getSourceRange() << 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -13608,7 +13608,7 @@ bool TreeTransform<Derived>::TransformOverloadExprDecls(OverloadExpr *Old,
|
|||
}
|
||||
|
||||
AllEmptyPacks &= Decls.empty();
|
||||
};
|
||||
}
|
||||
|
||||
// C++ [temp.res]/8.4.2:
|
||||
// The program is ill-formed, no diagnostic required, if [...] lookup for
|
||||
|
|
|
|||
|
|
@ -239,6 +239,10 @@ size_t PageSize() {
|
|||
}
|
||||
|
||||
void SetThreadName(std::thread &thread, const std::string &name) {
|
||||
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \
|
||||
defined(_GLIBCXX_GCC_GTHR_POSIX_H)
|
||||
(void)pthread_setname_np(thread.native_handle(), name.c_str());
|
||||
#else
|
||||
typedef HRESULT(WINAPI * proc)(HANDLE, PCWSTR);
|
||||
HMODULE kbase = GetModuleHandleA("KernelBase.dll");
|
||||
proc ThreadNameProc =
|
||||
|
|
@ -253,6 +257,7 @@ void SetThreadName(std::thread &thread, const std::string &name) {
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace fuzzer
|
||||
|
|
|
|||
|
|
@ -8823,83 +8823,6 @@ INTERCEPTOR(char *, RMD160Data, u8 *data, SIZE_T len, char *buf) {
|
|||
#define INIT_RMD160
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_MD5
|
||||
INTERCEPTOR(void, MD5Init, void *context) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Init, context);
|
||||
REAL(MD5Init)(context);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, MD5_CTX_sz);
|
||||
}
|
||||
|
||||
INTERCEPTOR(void, MD5Update, void *context, const unsigned char *data,
|
||||
unsigned int len) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Update, context, data, len);
|
||||
if (data && len > 0)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, MD5_CTX_sz);
|
||||
REAL(MD5Update)(context, data, len);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, MD5_CTX_sz);
|
||||
}
|
||||
|
||||
INTERCEPTOR(void, MD5Final, unsigned char digest[16], void *context) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Final, digest, context);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, MD5_CTX_sz);
|
||||
REAL(MD5Final)(digest, context);
|
||||
if (digest)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, digest, sizeof(unsigned char) * 16);
|
||||
}
|
||||
|
||||
INTERCEPTOR(char *, MD5End, void *context, char *buf) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5End, context, buf);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, MD5_CTX_sz);
|
||||
char *ret = REAL(MD5End)(context, buf);
|
||||
if (ret)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, MD5_return_length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
INTERCEPTOR(char *, MD5File, const char *filename, char *buf) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5File, filename, buf);
|
||||
if (filename)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, filename, internal_strlen(filename) + 1);
|
||||
char *ret = REAL(MD5File)(filename, buf);
|
||||
if (ret)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, MD5_return_length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
INTERCEPTOR(char *, MD5Data, const unsigned char *data, unsigned int len,
|
||||
char *buf) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Data, data, len, buf);
|
||||
if (data && len > 0)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len);
|
||||
char *ret = REAL(MD5Data)(data, len, buf);
|
||||
if (ret)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, MD5_return_length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define INIT_MD5 \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Init); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Update); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Final); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5End); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5File); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Data)
|
||||
#else
|
||||
#define INIT_MD5
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_FSEEK
|
||||
INTERCEPTOR(int, fseek, __sanitizer_FILE *stream, long int offset, int whence) {
|
||||
void *ctx;
|
||||
|
|
@ -9030,107 +8953,6 @@ INTERCEPTOR(char *, MD2Data, const unsigned char *data, unsigned int len,
|
|||
#define INIT_MD2
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_SHA2
|
||||
#define SHA2_INTERCEPTORS(LEN, SHA2_STATE_T) \
|
||||
INTERCEPTOR(void, SHA##LEN##_Init, void *context) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Init, context); \
|
||||
REAL(SHA##LEN##_Init)(context); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
} \
|
||||
INTERCEPTOR(void, SHA##LEN##_Update, void *context, \
|
||||
const u8 *data, SIZE_T len) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Update, context, data, len); \
|
||||
if (data && len > 0) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
REAL(SHA##LEN##_Update)(context, data, len); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
} \
|
||||
INTERCEPTOR(void, SHA##LEN##_Final, u8 digest[LEN/8], \
|
||||
void *context) { \
|
||||
void *ctx; \
|
||||
CHECK_EQ(SHA##LEN##_digest_length, LEN/8); \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Final, digest, context); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
REAL(SHA##LEN##_Final)(digest, context); \
|
||||
if (digest) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, digest, \
|
||||
sizeof(digest[0]) * \
|
||||
SHA##LEN##_digest_length); \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_End, void *context, char *buf) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_End, context, buf); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
char *ret = REAL(SHA##LEN##_End)(context, buf); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_File, const char *filename, char *buf) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_File, filename, buf); \
|
||||
if (filename) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, filename, internal_strlen(filename) + 1);\
|
||||
char *ret = REAL(SHA##LEN##_File)(filename, buf); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_FileChunk, const char *filename, char *buf, \
|
||||
OFF_T offset, OFF_T length) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_FileChunk, filename, buf, offset, \
|
||||
length); \
|
||||
if (filename) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, filename, internal_strlen(filename) + 1);\
|
||||
char *ret = REAL(SHA##LEN##_FileChunk)(filename, buf, offset, length); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_Data, u8 *data, SIZE_T len, char *buf) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Data, data, len, buf); \
|
||||
if (data && len > 0) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len); \
|
||||
char *ret = REAL(SHA##LEN##_Data)(data, len, buf); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
}
|
||||
|
||||
SHA2_INTERCEPTORS(224, u32)
|
||||
SHA2_INTERCEPTORS(256, u32)
|
||||
SHA2_INTERCEPTORS(384, u64)
|
||||
SHA2_INTERCEPTORS(512, u64)
|
||||
|
||||
#define INIT_SHA2_INTECEPTORS(LEN) \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Init); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Update); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Final); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_End); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_File); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_FileChunk); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Data)
|
||||
|
||||
#define INIT_SHA2 \
|
||||
INIT_SHA2_INTECEPTORS(224); \
|
||||
INIT_SHA2_INTECEPTORS(256); \
|
||||
INIT_SHA2_INTECEPTORS(384); \
|
||||
INIT_SHA2_INTECEPTORS(512)
|
||||
#undef SHA2_INTERCEPTORS
|
||||
#else
|
||||
#define INIT_SHA2
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_VIS
|
||||
INTERCEPTOR(char *, vis, char *dst, int c, int flag, int nextc) {
|
||||
void *ctx;
|
||||
|
|
@ -10588,10 +10410,8 @@ static void InitializeCommonInterceptors() {
|
|||
INIT_SHA1;
|
||||
INIT_MD4;
|
||||
INIT_RMD160;
|
||||
INIT_MD5;
|
||||
INIT_FSEEK;
|
||||
INIT_MD2;
|
||||
INIT_SHA2;
|
||||
INIT_VIS;
|
||||
INIT_CDB;
|
||||
INIT_GETFSENT;
|
||||
|
|
|
|||
|
|
@ -559,10 +559,8 @@
|
|||
#define SANITIZER_INTERCEPT_SHA1 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_MD4 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_RMD160 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_MD5 (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_FSEEK (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_MD2 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_SHA2 (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_CDB SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_VIS (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_POPEN SI_POSIX
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
// _LIBCPP_VERSION represents the version of libc++, which matches the version of LLVM.
|
||||
// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 17.0.1 == 17.00.01), _LIBCPP_VERSION is
|
||||
// defined to XXYYZZ.
|
||||
# define _LIBCPP_VERSION 190101
|
||||
# define _LIBCPP_VERSION 190102
|
||||
|
||||
# define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y
|
||||
# define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y)
|
||||
|
|
|
|||
|
|
@ -182,8 +182,9 @@ __cpp_lib_philox_engine 202406L <random>
|
|||
__cpp_lib_polymorphic_allocator 201902L <memory_resource>
|
||||
__cpp_lib_print 202207L <ostream> <print>
|
||||
__cpp_lib_quoted_string_io 201304L <iomanip>
|
||||
__cpp_lib_ranges 202207L <algorithm> <functional> <iterator>
|
||||
__cpp_lib_ranges 202211L <algorithm> <functional> <iterator>
|
||||
<memory> <ranges>
|
||||
202110L // C++20
|
||||
__cpp_lib_ranges_as_const 202207L <ranges>
|
||||
__cpp_lib_ranges_as_rvalue 202207L <ranges>
|
||||
__cpp_lib_ranges_chunk 202202L <ranges>
|
||||
|
|
@ -428,7 +429,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
|||
# if _LIBCPP_AVAILABILITY_HAS_PMR
|
||||
# define __cpp_lib_polymorphic_allocator 201902L
|
||||
# endif
|
||||
# define __cpp_lib_ranges 202207L
|
||||
# define __cpp_lib_ranges 202110L
|
||||
# define __cpp_lib_remove_cvref 201711L
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && _LIBCPP_AVAILABILITY_HAS_SYNC
|
||||
# define __cpp_lib_semaphore 201907L
|
||||
|
|
@ -480,6 +481,8 @@ __cpp_lib_void_t 201411L <type_traits>
|
|||
# define __cpp_lib_optional 202110L
|
||||
# define __cpp_lib_out_ptr 202106L
|
||||
# define __cpp_lib_print 202207L
|
||||
# undef __cpp_lib_ranges
|
||||
# define __cpp_lib_ranges 202211L
|
||||
// # define __cpp_lib_ranges_as_const 202207L
|
||||
# define __cpp_lib_ranges_as_rvalue 202207L
|
||||
// # define __cpp_lib_ranges_chunk 202202L
|
||||
|
|
|
|||
|
|
@ -181,11 +181,13 @@ static const InstructionMask r6[] = {
|
|||
{0xd7000000, 0x006020e0}, {0xd8000000, 0x006020e0},
|
||||
{0xdb000000, 0x006020e0}, {0xdf000000, 0x006020e0}};
|
||||
|
||||
constexpr uint32_t instParsePacketEnd = 0x0000c000;
|
||||
|
||||
static bool isDuplex(uint32_t insn) {
|
||||
// Duplex forms have a fixed mask and parse bits 15:14 are always
|
||||
// zero. Non-duplex insns will always have at least one bit set in the
|
||||
// parse field.
|
||||
return (0xC000 & insn) == 0;
|
||||
return (instParsePacketEnd & insn) == 0;
|
||||
}
|
||||
|
||||
static uint32_t findMaskR6(uint32_t insn) {
|
||||
|
|
@ -216,6 +218,12 @@ static uint32_t findMaskR11(uint32_t insn) {
|
|||
}
|
||||
|
||||
static uint32_t findMaskR16(uint32_t insn) {
|
||||
if (isDuplex(insn))
|
||||
return 0x03f00000;
|
||||
|
||||
// Clear the end-packet-parse bits:
|
||||
insn = insn & ~instParsePacketEnd;
|
||||
|
||||
if ((0xff000000 & insn) == 0x48000000)
|
||||
return 0x061f20ff;
|
||||
if ((0xff000000 & insn) == 0x49000000)
|
||||
|
|
@ -225,8 +233,14 @@ static uint32_t findMaskR16(uint32_t insn) {
|
|||
if ((0xff000000 & insn) == 0xb0000000)
|
||||
return 0x0fe03fe0;
|
||||
|
||||
if (isDuplex(insn))
|
||||
return 0x03f00000;
|
||||
if ((0xff802000 & insn) == 0x74000000)
|
||||
return 0x00001fe0;
|
||||
if ((0xff802000 & insn) == 0x74002000)
|
||||
return 0x00001fe0;
|
||||
if ((0xff802000 & insn) == 0x74800000)
|
||||
return 0x00001fe0;
|
||||
if ((0xff802000 & insn) == 0x74802000)
|
||||
return 0x00001fe0;
|
||||
|
||||
for (InstructionMask i : r6)
|
||||
if ((0xff000000 & insn) == i.cmpMask)
|
||||
|
|
|
|||
|
|
@ -275,6 +275,9 @@ public:
|
|||
|
||||
/// This is a wrapper around getRegForValue that also takes care of
|
||||
/// truncating or sign-extending the given getelementptr index value.
|
||||
Register getRegForGEPIndex(MVT PtrVT, const Value *Idx);
|
||||
|
||||
/// Retained for ABI compatibility in release branch.
|
||||
Register getRegForGEPIndex(const Value *Idx);
|
||||
|
||||
/// We're checking to see if we can fold \p LI into \p FoldInst. Note
|
||||
|
|
|
|||
|
|
@ -380,14 +380,13 @@ void FastISel::updateValueMap(const Value *I, Register Reg, unsigned NumRegs) {
|
|||
}
|
||||
}
|
||||
|
||||
Register FastISel::getRegForGEPIndex(const Value *Idx) {
|
||||
Register FastISel::getRegForGEPIndex(MVT PtrVT, const Value *Idx) {
|
||||
Register IdxN = getRegForValue(Idx);
|
||||
if (!IdxN)
|
||||
// Unhandled operand. Halt "fast" selection and bail.
|
||||
return Register();
|
||||
|
||||
// If the index is smaller or larger than intptr_t, truncate or extend it.
|
||||
MVT PtrVT = TLI.getPointerTy(DL);
|
||||
EVT IdxVT = EVT::getEVT(Idx->getType(), /*HandleUnknown=*/false);
|
||||
if (IdxVT.bitsLT(PtrVT)) {
|
||||
IdxN = fastEmit_r(IdxVT.getSimpleVT(), PtrVT, ISD::SIGN_EXTEND, IdxN);
|
||||
|
|
@ -398,6 +397,10 @@ Register FastISel::getRegForGEPIndex(const Value *Idx) {
|
|||
return IdxN;
|
||||
}
|
||||
|
||||
Register FastISel::getRegForGEPIndex(const Value *Idx) {
|
||||
return getRegForGEPIndex(TLI.getPointerTy(DL), Idx);
|
||||
}
|
||||
|
||||
void FastISel::recomputeInsertPt() {
|
||||
if (getLastLocalValue()) {
|
||||
FuncInfo.InsertPt = getLastLocalValue();
|
||||
|
|
@ -543,7 +546,8 @@ bool FastISel::selectGetElementPtr(const User *I) {
|
|||
uint64_t TotalOffs = 0;
|
||||
// FIXME: What's a good SWAG number for MaxOffs?
|
||||
uint64_t MaxOffs = 2048;
|
||||
MVT VT = TLI.getPointerTy(DL);
|
||||
MVT VT = TLI.getValueType(DL, I->getType()).getSimpleVT();
|
||||
|
||||
for (gep_type_iterator GTI = gep_type_begin(I), E = gep_type_end(I);
|
||||
GTI != E; ++GTI) {
|
||||
const Value *Idx = GTI.getOperand();
|
||||
|
|
@ -584,7 +588,7 @@ bool FastISel::selectGetElementPtr(const User *I) {
|
|||
|
||||
// N = N + Idx * ElementSize;
|
||||
uint64_t ElementSize = GTI.getSequentialElementStride(DL);
|
||||
Register IdxN = getRegForGEPIndex(Idx);
|
||||
Register IdxN = getRegForGEPIndex(VT, Idx);
|
||||
if (!IdxN) // Unhandled operand. Halt "fast" selection and bail.
|
||||
return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -902,6 +902,8 @@ redo_gep:
|
|||
uint64_t Disp = (int32_t)AM.Disp;
|
||||
unsigned IndexReg = AM.IndexReg;
|
||||
unsigned Scale = AM.Scale;
|
||||
MVT PtrVT = TLI.getValueType(DL, U->getType()).getSimpleVT();
|
||||
|
||||
gep_type_iterator GTI = gep_type_begin(U);
|
||||
// Iterate through the indices, folding what we can. Constants can be
|
||||
// folded, and one dynamic index can be handled, if the scale is supported.
|
||||
|
|
@ -937,7 +939,7 @@ redo_gep:
|
|||
(S == 1 || S == 2 || S == 4 || S == 8)) {
|
||||
// Scaled-index addressing.
|
||||
Scale = S;
|
||||
IndexReg = getRegForGEPIndex(Op);
|
||||
IndexReg = getRegForGEPIndex(PtrVT, Op);
|
||||
if (IndexReg == 0)
|
||||
return false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -2475,8 +2475,12 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
(Subtarget.isTargetWindowsMSVC() || Subtarget.isTargetWindowsItanium()))
|
||||
// clang-format off
|
||||
for (ISD::NodeType Op :
|
||||
{ISD::FCEIL, ISD::STRICT_FCEIL,
|
||||
{ISD::FACOS, ISD::STRICT_FACOS,
|
||||
ISD::FASIN, ISD::STRICT_FASIN,
|
||||
ISD::FATAN, ISD::STRICT_FATAN,
|
||||
ISD::FCEIL, ISD::STRICT_FCEIL,
|
||||
ISD::FCOS, ISD::STRICT_FCOS,
|
||||
ISD::FCOSH, ISD::STRICT_FCOSH,
|
||||
ISD::FEXP, ISD::STRICT_FEXP,
|
||||
ISD::FFLOOR, ISD::STRICT_FFLOOR,
|
||||
ISD::FREM, ISD::STRICT_FREM,
|
||||
|
|
@ -2484,7 +2488,9 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
ISD::FLOG10, ISD::STRICT_FLOG10,
|
||||
ISD::FPOW, ISD::STRICT_FPOW,
|
||||
ISD::FSIN, ISD::STRICT_FSIN,
|
||||
ISD::FTAN, ISD::STRICT_FTAN})
|
||||
ISD::FSINH, ISD::STRICT_FSINH,
|
||||
ISD::FTAN, ISD::STRICT_FTAN,
|
||||
ISD::FTANH, ISD::STRICT_FTANH})
|
||||
if (isOperationExpand(Op, MVT::f32))
|
||||
setOperationAction(Op, MVT::f32, Promote);
|
||||
// clang-format on
|
||||
|
|
@ -47893,7 +47899,8 @@ static SDValue combineMul(SDNode *N, SelectionDAG &DAG,
|
|||
if (VT.isVector())
|
||||
if (auto *RawC = getTargetConstantFromNode(N->getOperand(1)))
|
||||
if (auto *SplatC = RawC->getSplatValue())
|
||||
C = &(SplatC->getUniqueInteger());
|
||||
if (auto *SplatCI = dyn_cast<ConstantInt>(SplatC))
|
||||
C = &(SplatCI->getValue());
|
||||
|
||||
if (!C || C->getBitWidth() != VT.getScalarSizeInBits())
|
||||
return SDValue();
|
||||
|
|
|
|||
|
|
@ -926,9 +926,11 @@ static Value *foldIsPowerOf2OrZero(ICmpInst *Cmp0, ICmpInst *Cmp1, bool IsAnd,
|
|||
}
|
||||
|
||||
/// Reduce a pair of compares that check if a value has exactly 1 bit set.
|
||||
/// Also used for logical and/or, must be poison safe.
|
||||
/// Also used for logical and/or, must be poison safe if range attributes are
|
||||
/// dropped.
|
||||
static Value *foldIsPowerOf2(ICmpInst *Cmp0, ICmpInst *Cmp1, bool JoinedByAnd,
|
||||
InstCombiner::BuilderTy &Builder) {
|
||||
InstCombiner::BuilderTy &Builder,
|
||||
InstCombinerImpl &IC) {
|
||||
// Handle 'and' / 'or' commutation: make the equality check the first operand.
|
||||
if (JoinedByAnd && Cmp1->getPredicate() == ICmpInst::ICMP_NE)
|
||||
std::swap(Cmp0, Cmp1);
|
||||
|
|
@ -942,7 +944,10 @@ static Value *foldIsPowerOf2(ICmpInst *Cmp0, ICmpInst *Cmp1, bool JoinedByAnd,
|
|||
match(Cmp1, m_ICmp(Pred1, m_Intrinsic<Intrinsic::ctpop>(m_Specific(X)),
|
||||
m_SpecificInt(2))) &&
|
||||
Pred0 == ICmpInst::ICMP_NE && Pred1 == ICmpInst::ICMP_ULT) {
|
||||
Value *CtPop = Cmp1->getOperand(0);
|
||||
auto *CtPop = cast<Instruction>(Cmp1->getOperand(0));
|
||||
// Drop range attributes and re-infer them in the next iteration.
|
||||
CtPop->dropPoisonGeneratingAnnotations();
|
||||
IC.addToWorklist(CtPop);
|
||||
return Builder.CreateICmpEQ(CtPop, ConstantInt::get(CtPop->getType(), 1));
|
||||
}
|
||||
// (X == 0) || (ctpop(X) u> 1) --> ctpop(X) != 1
|
||||
|
|
@ -950,7 +955,10 @@ static Value *foldIsPowerOf2(ICmpInst *Cmp0, ICmpInst *Cmp1, bool JoinedByAnd,
|
|||
match(Cmp1, m_ICmp(Pred1, m_Intrinsic<Intrinsic::ctpop>(m_Specific(X)),
|
||||
m_SpecificInt(1))) &&
|
||||
Pred0 == ICmpInst::ICMP_EQ && Pred1 == ICmpInst::ICMP_UGT) {
|
||||
Value *CtPop = Cmp1->getOperand(0);
|
||||
auto *CtPop = cast<Instruction>(Cmp1->getOperand(0));
|
||||
// Drop range attributes and re-infer them in the next iteration.
|
||||
CtPop->dropPoisonGeneratingAnnotations();
|
||||
IC.addToWorklist(CtPop);
|
||||
return Builder.CreateICmpNE(CtPop, ConstantInt::get(CtPop->getType(), 1));
|
||||
}
|
||||
return nullptr;
|
||||
|
|
@ -3347,7 +3355,7 @@ Value *InstCombinerImpl::foldAndOrOfICmps(ICmpInst *LHS, ICmpInst *RHS,
|
|||
if (Value *V = foldSignedTruncationCheck(LHS, RHS, I, Builder))
|
||||
return V;
|
||||
|
||||
if (Value *V = foldIsPowerOf2(LHS, RHS, IsAnd, Builder))
|
||||
if (Value *V = foldIsPowerOf2(LHS, RHS, IsAnd, Builder, *this))
|
||||
return V;
|
||||
|
||||
if (Value *V = foldPowerOf2AndShiftedMask(LHS, RHS, IsAnd, Builder))
|
||||
|
|
|
|||
|
|
@ -1900,33 +1900,35 @@ bool VectorCombine::foldShuffleToIdentity(Instruction &I) {
|
|||
|
||||
// We need each element to be the same type of value, and check that each
|
||||
// element has a single use.
|
||||
if (all_of(drop_begin(Item), [Item](InstLane IL) {
|
||||
Value *FrontV = Item.front().first->get();
|
||||
if (!IL.first)
|
||||
return true;
|
||||
Value *V = IL.first->get();
|
||||
if (auto *I = dyn_cast<Instruction>(V); I && !I->hasOneUse())
|
||||
return false;
|
||||
if (V->getValueID() != FrontV->getValueID())
|
||||
return false;
|
||||
if (auto *CI = dyn_cast<CmpInst>(V))
|
||||
if (CI->getPredicate() != cast<CmpInst>(FrontV)->getPredicate())
|
||||
return false;
|
||||
if (auto *CI = dyn_cast<CastInst>(V))
|
||||
if (CI->getSrcTy() != cast<CastInst>(FrontV)->getSrcTy())
|
||||
return false;
|
||||
if (auto *SI = dyn_cast<SelectInst>(V))
|
||||
if (!isa<VectorType>(SI->getOperand(0)->getType()) ||
|
||||
SI->getOperand(0)->getType() !=
|
||||
cast<SelectInst>(FrontV)->getOperand(0)->getType())
|
||||
return false;
|
||||
if (isa<CallInst>(V) && !isa<IntrinsicInst>(V))
|
||||
return false;
|
||||
auto *II = dyn_cast<IntrinsicInst>(V);
|
||||
return !II || (isa<IntrinsicInst>(FrontV) &&
|
||||
II->getIntrinsicID() ==
|
||||
cast<IntrinsicInst>(FrontV)->getIntrinsicID());
|
||||
})) {
|
||||
auto CheckLaneIsEquivalentToFirst = [Item](InstLane IL) {
|
||||
Value *FrontV = Item.front().first->get();
|
||||
if (!IL.first)
|
||||
return true;
|
||||
Value *V = IL.first->get();
|
||||
if (auto *I = dyn_cast<Instruction>(V); I && !I->hasOneUse())
|
||||
return false;
|
||||
if (V->getValueID() != FrontV->getValueID())
|
||||
return false;
|
||||
if (auto *CI = dyn_cast<CmpInst>(V))
|
||||
if (CI->getPredicate() != cast<CmpInst>(FrontV)->getPredicate())
|
||||
return false;
|
||||
if (auto *CI = dyn_cast<CastInst>(V))
|
||||
if (CI->getSrcTy() != cast<CastInst>(FrontV)->getSrcTy())
|
||||
return false;
|
||||
if (auto *SI = dyn_cast<SelectInst>(V))
|
||||
if (!isa<VectorType>(SI->getOperand(0)->getType()) ||
|
||||
SI->getOperand(0)->getType() !=
|
||||
cast<SelectInst>(FrontV)->getOperand(0)->getType())
|
||||
return false;
|
||||
if (isa<CallInst>(V) && !isa<IntrinsicInst>(V))
|
||||
return false;
|
||||
auto *II = dyn_cast<IntrinsicInst>(V);
|
||||
return !II || (isa<IntrinsicInst>(FrontV) &&
|
||||
II->getIntrinsicID() ==
|
||||
cast<IntrinsicInst>(FrontV)->getIntrinsicID() &&
|
||||
!II->hasOperandBundles());
|
||||
};
|
||||
if (all_of(drop_begin(Item), CheckLaneIsEquivalentToFirst)) {
|
||||
// Check the operator is one that we support.
|
||||
if (isa<BinaryOperator, CmpInst>(FrontU)) {
|
||||
// We exclude div/rem in case they hit UB from poison lanes.
|
||||
|
|
@ -1954,7 +1956,8 @@ bool VectorCombine::foldShuffleToIdentity(Instruction &I) {
|
|||
Worklist.push_back(generateInstLaneVectorFromOperand(Item, 2));
|
||||
continue;
|
||||
} else if (auto *II = dyn_cast<IntrinsicInst>(FrontU);
|
||||
II && isTriviallyVectorizable(II->getIntrinsicID())) {
|
||||
II && isTriviallyVectorizable(II->getIntrinsicID()) &&
|
||||
!II->hasOperandBundles()) {
|
||||
for (unsigned Op = 0, E = II->getNumOperands() - 1; Op < E; Op++) {
|
||||
if (isVectorIntrinsicWithScalarOpAtArg(II->getIntrinsicID(), Op)) {
|
||||
if (!all_of(drop_begin(Item), [Item, Op](InstLane &IL) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#define LLVM_REVISION "llvmorg-19.1.1-0-gd401987fe349"
|
||||
#define LLVM_REVISION "llvmorg-19.1.2-0-g7ba7d8e2f7b6"
|
||||
#define LLVM_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
||||
#define CLANG_REVISION "llvmorg-19.1.1-0-gd401987fe349"
|
||||
#define CLANG_REVISION "llvmorg-19.1.2-0-g7ba7d8e2f7b6"
|
||||
#define CLANG_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
||||
#define LLDB_REVISION "llvmorg-19.1.1-0-gd401987fe349"
|
||||
#define LLDB_REVISION "llvmorg-19.1.2-0-g7ba7d8e2f7b6"
|
||||
#define LLDB_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#define CLANG_VERSION 19.1.1
|
||||
#define CLANG_VERSION_STRING "19.1.1"
|
||||
#define CLANG_VERSION 19.1.2
|
||||
#define CLANG_VERSION_STRING "19.1.2"
|
||||
#define CLANG_VERSION_MAJOR 19
|
||||
#define CLANG_VERSION_MAJOR_STRING "19"
|
||||
#define CLANG_VERSION_MINOR 1
|
||||
#define CLANG_VERSION_PATCHLEVEL 1
|
||||
#define CLANG_VERSION_PATCHLEVEL 2
|
||||
|
||||
#define CLANG_VENDOR "FreeBSD "
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Local identifier in __FreeBSD_version style
|
||||
#define LLD_FREEBSD_VERSION 1500001
|
||||
|
||||
#define LLD_VERSION_STRING "19.1.1 (FreeBSD llvmorg-19.1.1-0-gd401987fe349-" __XSTRING(LLD_FREEBSD_VERSION) ")"
|
||||
#define LLD_VERSION_STRING "19.1.2 (FreeBSD llvmorg-19.1.2-0-g7ba7d8e2f7b6-" __XSTRING(LLD_FREEBSD_VERSION) ")"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#define LLDB_VERSION 19.1.1
|
||||
#define LLDB_VERSION_STRING "19.1.1"
|
||||
#define LLDB_VERSION 19.1.2
|
||||
#define LLDB_VERSION_STRING "19.1.2"
|
||||
#define LLDB_VERSION_MAJOR 19
|
||||
#define LLDB_VERSION_MINOR 1
|
||||
#define LLDB_VERSION_PATCH 1
|
||||
#define LLDB_VERSION_PATCH 2
|
||||
/* #undef LLDB_FULL_VERSION_STRING */
|
||||
|
|
|
|||
|
|
@ -338,10 +338,10 @@
|
|||
#define PACKAGE_NAME "LLVM"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "LLVM 19.1.1"
|
||||
#define PACKAGE_STRING "LLVM 19.1.2"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "19.1.1"
|
||||
#define PACKAGE_VERSION "19.1.2"
|
||||
|
||||
/* Define to the vendor of this package. */
|
||||
/* #undef PACKAGE_VENDOR */
|
||||
|
|
|
|||
|
|
@ -176,10 +176,10 @@
|
|||
#define LLVM_VERSION_MINOR 1
|
||||
|
||||
/* Patch version of the LLVM API */
|
||||
#define LLVM_VERSION_PATCH 1
|
||||
#define LLVM_VERSION_PATCH 2
|
||||
|
||||
/* LLVM version string */
|
||||
#define LLVM_VERSION_STRING "19.1.1"
|
||||
#define LLVM_VERSION_STRING "19.1.2"
|
||||
|
||||
/* Whether LLVM records statistics for use with GetStatistics(),
|
||||
* PrintStatistics() or PrintStatisticsJSON()
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#define LLVM_REVISION "llvmorg-19.1.1-0-gd401987fe349"
|
||||
#define LLVM_REVISION "llvmorg-19.1.2-0-g7ba7d8e2f7b6"
|
||||
#define LLVM_REPOSITORY "https://github.com/llvm/llvm-project.git"
|
||||
|
|
|
|||
Loading…
Reference in a new issue