Lines Matching refs:New
1484 const FunctionDecl *New) { in AllowOverloadingOfFunction() argument
1485 if (Context.getLangOpts().CPlusPlus || New->hasAttr<OverloadableAttr>()) in AllowOverloadingOfFunction()
1610 bool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationModuleOwnership() argument
1618 if (New->getFriendObjectKind() && in CheckRedeclarationModuleOwnership()
1619 Old->getOwningModuleForLinkage() != New->getOwningModuleForLinkage()) { in CheckRedeclarationModuleOwnership()
1620 New->setLocalOwningModule(Old->getOwningModule()); in CheckRedeclarationModuleOwnership()
1621 makeMergedDefinitionVisible(New); in CheckRedeclarationModuleOwnership()
1625 Module *NewM = New->getOwningModule(); in CheckRedeclarationModuleOwnership()
1648 Diag(New->getLocation(), diag::err_mismatched_owning_module) in CheckRedeclarationModuleOwnership()
1649 << New in CheckRedeclarationModuleOwnership()
1655 New->setInvalidDecl(); in CheckRedeclarationModuleOwnership()
1665 bool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationExported() argument
1671 if (!New->getLexicalDeclContext() in CheckRedeclarationExported()
1679 bool IsNewExported = New->isInExportDeclContext(); in CheckRedeclarationExported()
1697 Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S; in CheckRedeclarationExported()
1704 bool Sema::CheckRedeclarationInModule(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationInModule() argument
1705 if (CheckRedeclarationModuleOwnership(New, Old)) in CheckRedeclarationInModule()
1708 if (CheckRedeclarationExported(New, Old)) in CheckRedeclarationInModule()
1730 bool Sema::IsRedefinitionInModule(const NamedDecl *New, in IsRedefinitionInModule() argument
1732 assert(getASTContext().isSameEntity(New, Old) && in IsRedefinitionInModule()
1735 assert(const_cast<Sema *>(this)->isReachable(New) && in IsRedefinitionInModule()
1739 Module *NewM = New->getOwningModule(); in IsRedefinitionInModule()
2312 FunctionDecl *New = FunctionDecl::Create(Context, Parent, Loc, Loc, II, Type, in CreateBuiltin() local
2316 New->setImplicit(); in CreateBuiltin()
2317 New->addAttr(BuiltinAttr::CreateImplicit(Context, ID)); in CreateBuiltin()
2325 Context, New, SourceLocation(), SourceLocation(), nullptr, in CreateBuiltin()
2330 New->setParams(Params); in CreateBuiltin()
2333 AddKnownFunctionAttributes(New); in CreateBuiltin()
2334 return New; in CreateBuiltin()
2388 FunctionDecl *New = CreateBuiltin(II, R, ID, Loc); in LazilyCreateBuiltin() local
2389 RegisterLocallyScopedExternCDecl(New, S); in LazilyCreateBuiltin()
2396 CurContext = New->getDeclContext(); in LazilyCreateBuiltin()
2397 PushOnScopeChains(New, TUScope); in LazilyCreateBuiltin()
2399 return New; in LazilyCreateBuiltin()
2445 bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) { in isIncompatibleTypedef() argument
2451 QualType NewType = New->getUnderlyingType(); in isIncompatibleTypedef()
2456 Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) in isIncompatibleTypedef()
2459 notePreviousDefinition(Old, New->getLocation()); in isIncompatibleTypedef()
2460 New->setInvalidDecl(); in isIncompatibleTypedef()
2469 Diag(New->getLocation(), diag::err_redefinition_different_typedef) in isIncompatibleTypedef()
2472 notePreviousDefinition(Old, New->getLocation()); in isIncompatibleTypedef()
2473 New->setInvalidDecl(); in isIncompatibleTypedef()
2484 void Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, in MergeTypedefNameDecl() argument
2488 if (New->isInvalidDecl()) return; in MergeTypedefNameDecl()
2493 const IdentifierInfo *TypeID = New->getIdentifier(); in MergeTypedefNameDecl()
2500 QualType T = New->getUnderlyingType(); in MergeTypedefNameDecl()
2510 New->setTypeForDecl(Context.getObjCIdType().getTypePtr()); in MergeTypedefNameDecl()
2516 Context.setObjCClassRedefinitionType(New->getUnderlyingType()); in MergeTypedefNameDecl()
2518 New->setTypeForDecl(Context.getObjCClassType().getTypePtr()); in MergeTypedefNameDecl()
2523 Context.setObjCSelRedefinitionType(New->getUnderlyingType()); in MergeTypedefNameDecl()
2525 New->setTypeForDecl(Context.getObjCSelType().getTypePtr()); in MergeTypedefNameDecl()
2534 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeTypedefNameDecl()
2535 << New->getDeclName(); in MergeTypedefNameDecl()
2539 notePreviousDefinition(OldD, New->getLocation()); in MergeTypedefNameDecl()
2541 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2546 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2550 auto *NewTag = New->getAnonDeclWithTypedefName(); in MergeTypedefNameDecl()
2557 New->setTypeForDecl(OldTD->getTypeForDecl()); in MergeTypedefNameDecl()
2559 New->setModedTypeSourceInfo(OldTD->getTypeSourceInfo(), in MergeTypedefNameDecl()
2562 New->setTypeSourceInfo(OldTD->getTypeSourceInfo()); in MergeTypedefNameDecl()
2584 if (isIncompatibleTypedef(Old, New)) in MergeTypedefNameDecl()
2590 New->setPreviousDecl(Typedef); in MergeTypedefNameDecl()
2591 mergeDeclAttributes(New, Old); in MergeTypedefNameDecl()
2629 Diag(New->getLocation(), diag::err_redefinition) in MergeTypedefNameDecl()
2630 << New->getDeclName(); in MergeTypedefNameDecl()
2631 notePreviousDefinition(Old, New->getLocation()); in MergeTypedefNameDecl()
2632 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2647 Context.getSourceManager().isInSystemHeader(New->getLocation()))) in MergeTypedefNameDecl()
2650 Diag(New->getLocation(), diag::ext_redefinition_of_typedef) in MergeTypedefNameDecl()
2651 << New->getDeclName(); in MergeTypedefNameDecl()
2652 notePreviousDefinition(Old, New->getLocation()); in MergeTypedefNameDecl()
2688 static bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) { in mergeAlignedAttrs() argument
2717 for (auto *I : New->specific_attrs<AlignedAttr>()) { in mergeAlignedAttrs()
2739 if (ValueDecl *VD = dyn_cast<ValueDecl>(New)) in mergeAlignedAttrs()
2742 Ty = S.Context.getTagDeclType(cast<TagDecl>(New)); in mergeAlignedAttrs()
2758 if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) { in mergeAlignedAttrs()
2767 S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) in mergeAlignedAttrs()
2779 New->addAttr(Clone); in mergeAlignedAttrs()
2788 New->addAttr(Clone); in mergeAlignedAttrs()
2924 static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) { in checkNewAttributesAfterDef() argument
2925 if (!New->hasAttrs()) in checkNewAttributesAfterDef()
2929 if (!Def || Def == New) in checkNewAttributesAfterDef()
2932 AttrVec &NewAttributes = New->getAttrs(); in checkNewAttributesAfterDef()
2937 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) { in checkNewAttributesAfterDef()
2948 VarDecl *VD = cast<VarDecl>(New); in checkNewAttributesAfterDef()
3016 cast<VarDecl>(New)->isInline() && in checkNewAttributesAfterDef()
3017 !cast<VarDecl>(New)->isInlineSpecified()) { in checkNewAttributesAfterDef()
3092 void Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, in mergeDeclAttributes() argument
3097 New->addAttr(NewAttr); in mergeDeclAttributes()
3102 New->addAttr(NewAttr); in mergeDeclAttributes()
3105 if (!Old->hasAttrs() && !New->hasAttrs()) in mergeDeclAttributes()
3112 const auto *NewConstInit = New->getAttr<ConstInitAttr>(); in mergeDeclAttributes()
3115 auto *NewVD = cast<VarDecl>(New); in mergeDeclAttributes()
3144 checkNewAttributesAfterDef(*this, New, Old); in mergeDeclAttributes()
3146 if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) { in mergeDeclAttributes()
3150 Diag(New->getLocation(), diag::err_different_asm_label); in mergeDeclAttributes()
3156 Diag(New->getLocation(), diag::err_late_asm_label_name) in mergeDeclAttributes()
3157 << isa<FunctionDecl>(Old) << New->getAttr<AsmLabelAttr>()->getRange(); in mergeDeclAttributes()
3162 if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) { in mergeDeclAttributes()
3179 if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) { in mergeDeclAttributes()
3180 if (auto *VD = dyn_cast<VarDecl>(New)) { in mergeDeclAttributes()
3182 Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration); in mergeDeclAttributes()
3189 const auto *NewCSA = New->getAttr<CodeSegAttr>(); in mergeDeclAttributes()
3191 !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) { in mergeDeclAttributes()
3192 Diag(New->getLocation(), diag::warn_mismatched_section) in mergeDeclAttributes()
3200 bool foundAny = New->hasAttrs(); in mergeDeclAttributes()
3204 if (!foundAny) New->setAttrs(AttrVec()); in mergeDeclAttributes()
3229 if (mergeDeclAttribute(*this, New, I, LocalAMK)) in mergeDeclAttributes()
3233 if (mergeAlignedAttrs(*this, New, Old)) in mergeDeclAttributes()
3236 if (!foundAny) New->dropAttrs(); in mergeDeclAttributes()
3284 static bool EquivalentArrayTypes(QualType Old, QualType New, in EquivalentArrayTypes() argument
3296 if (NoSizeInfo(Old) && NoSizeInfo(New)) in EquivalentArrayTypes()
3300 if (Old->isVariableArrayType() && New->isVariableArrayType()) { in EquivalentArrayTypes()
3302 const auto *NewVAT = Ctx.getAsVariableArrayType(New); in EquivalentArrayTypes()
3310 if (Old->isConstantArrayType() && New->isConstantArrayType()) { in EquivalentArrayTypes()
3312 Ctx.getAsConstantArrayType(New)->getSize(); in EquivalentArrayTypes()
3316 if (Old->isDependentSizedArrayType() && New->isDependentSizedArrayType()) { in EquivalentArrayTypes()
3320 return Old == New; in EquivalentArrayTypes()
3379 getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) { in getNoteDiagForInvalidRedeclaration() argument
3391 OldLocation = New->getLocation(); in getNoteDiagForInvalidRedeclaration()
3416 static bool haveIncompatibleLanguageLinkages(const T *Old, const T *New) { in haveIncompatibleLanguageLinkages() argument
3422 if (OldLinkage == CXXLanguageLinkage && New->isInExternCContext()) in haveIncompatibleLanguageLinkages()
3424 if (OldLinkage == CLanguageLinkage && New->isInExternCXXContext()) in haveIncompatibleLanguageLinkages()
3438 ExpectedDecl *New) { in checkUsingShadowRedecl() argument
3459 New->getDeclContext()->getRedeclContext()) && in checkUsingShadowRedecl()
3460 !(isExternC(Old) && isExternC(New))) in checkUsingShadowRedecl()
3464 S.Diag(New->getLocation(), diag::err_using_decl_conflict_reverse); in checkUsingShadowRedecl()
3541 bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, in MergeFunctionDecl() argument
3547 if (New->getFriendObjectKind()) { in MergeFunctionDecl()
3548 Diag(New->getLocation(), diag::err_using_decl_friend); in MergeFunctionDecl()
3559 New->getDescribedFunctionTemplate()) { in MergeFunctionDecl()
3566 if (checkUsingShadowRedecl<FunctionDecl>(*this, Shadow, New)) in MergeFunctionDecl()
3571 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeFunctionDecl()
3572 << New->getDeclName(); in MergeFunctionDecl()
3573 notePreviousDefinition(OldD, New->getLocation()); in MergeFunctionDecl()
3580 adjustDeclContextForDeclaratorDecl(New, Old); in MergeFunctionDecl()
3588 Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName(); in MergeFunctionDecl()
3597 getNoteDiagForInvalidRedeclaration(Old, New); in MergeFunctionDecl()
3603 if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && in MergeFunctionDecl()
3604 New->getStorageClass() == SC_Static && in MergeFunctionDecl()
3606 !New->getTemplateSpecializationInfo() && in MergeFunctionDecl()
3609 Diag(New->getLocation(), diag::ext_static_non_static) << New; in MergeFunctionDecl()
3612 Diag(New->getLocation(), diag::err_static_non_static) << New; in MergeFunctionDecl()
3618 if (const auto *ILA = New->getAttr<InternalLinkageAttr>()) in MergeFunctionDecl()
3620 Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) in MergeFunctionDecl()
3623 New->dropAttr<InternalLinkageAttr>(); in MergeFunctionDecl()
3626 if (auto *EA = New->getAttr<ErrorAttr>()) { in MergeFunctionDecl()
3630 New->dropAttr<ErrorAttr>(); in MergeFunctionDecl()
3634 if (CheckRedeclarationInModule(New, Old)) in MergeFunctionDecl()
3639 if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) { in MergeFunctionDecl()
3640 Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) in MergeFunctionDecl()
3641 << New << OldOvl; in MergeFunctionDecl()
3666 New->addAttr(OverloadableAttr::CreateImplicit(Context)); in MergeFunctionDecl()
3668 New->dropAttr<OverloadableAttr>(); in MergeFunctionDecl()
3686 QualType NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3698 bool NewCCExplicit = getCallingConvAttributedType(New->getType()); in MergeFunctionDecl()
3711 Diag(New->getLocation(), diag::warn_cconv_unsupported) in MergeFunctionDecl()
3719 Diag(New->getLocation(), diag::err_cconv_change) in MergeFunctionDecl()
3741 Diag(New->getLocation(), diag::err_regparm_mismatch) in MergeFunctionDecl()
3755 Diag(New->getLocation(), diag::err_function_attribute_mismatch) in MergeFunctionDecl()
3769 New->getAttr<AnyX86NoCallerSavedRegistersAttr>(); in MergeFunctionDecl()
3770 Diag(New->getLocation(), diag::err_function_attribute_mismatch) << Attr; in MergeFunctionDecl()
3780 const FunctionType *AdjustedType = New->getType()->getAs<FunctionType>(); in MergeFunctionDecl()
3782 New->setType(QualType(AdjustedType, 0)); in MergeFunctionDecl()
3783 NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3788 if (!Old->isInlined() && New->isInlined() && in MergeFunctionDecl()
3789 !New->hasAttr<GNUInlineAttr>() && in MergeFunctionDecl()
3792 !Old->isDefined() && !New->isThisDeclarationADefinition()) in MergeFunctionDecl()
3798 if (New->hasAttr<GNUInlineAttr>() && in MergeFunctionDecl()
3805 if (Old->getNumParams() > 0 && Old->getNumParams() == New->getNumParams() && in MergeFunctionDecl()
3806 !hasIdenticalPassObjectSizeAttrs(Old, New)) { in MergeFunctionDecl()
3807 Diag(New->getLocation(), diag::err_different_pass_object_size_params) in MergeFunctionDecl()
3808 << New->getDeclName(); in MergeFunctionDecl()
3824 if (CheckEquivalentExceptionSpec(Old, New)) in MergeFunctionDecl()
3827 NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3835 QualType NewDeclaredReturnType = New->getDeclaredReturnType(); in MergeFunctionDecl()
3837 canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, in MergeFunctionDecl()
3845 if (New->isCXXClassMember() && New->isOutOfLine()) in MergeFunctionDecl()
3846 Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) in MergeFunctionDecl()
3847 << New << New->getReturnTypeSourceRange(); in MergeFunctionDecl()
3849 Diag(New->getLocation(), diag::err_ovl_diff_return_type) in MergeFunctionDecl()
3850 << New->getReturnTypeSourceRange(); in MergeFunctionDecl()
3868 New->setType(SubstAutoTypeDependent(New->getType())); in MergeFunctionDecl()
3871 New->setType(SubstAutoType(New->getType(), DT)); in MergeFunctionDecl()
3878 CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New); in MergeFunctionDecl()
3897 Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member); in MergeFunctionDecl()
3917 Diag(New->getLocation(), NewDiag); in MergeFunctionDecl()
3919 Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) in MergeFunctionDecl()
3920 << New << New->getType(); in MergeFunctionDecl()
3936 << New << getSpecialMember(OldMethod); in MergeFunctionDecl()
3951 if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>()) in MergeFunctionDecl()
3962 const CarriesDependencyAttr *CDA = New->getAttr<CarriesDependencyAttr>(); in MergeFunctionDecl()
3985 if (haveIncompatibleLanguageLinkages(Old, New)) { in MergeFunctionDecl()
3994 if (New->getFriendObjectKind() != Decl::FOK_None) { in MergeFunctionDecl()
3995 Diag(New->getLocation(), diag::ext_retained_language_linkage) << New; in MergeFunctionDecl()
3998 Diag(New->getLocation(), diag::err_different_language_linkage) << New; in MergeFunctionDecl()
4010 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4015 if (!canFullyTypeCheckRedeclaration(New, Old, NewQType, OldQType)) in MergeFunctionDecl()
4036 if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && in MergeFunctionDecl()
4037 Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) { in MergeFunctionDecl()
4040 Diag(New->getLocation(), diag::err_conflicting_types) << New; in MergeFunctionDecl()
4055 if (New->hasWrittenPrototype() != Old->hasWrittenPrototype() && in MergeFunctionDecl()
4056 !New->isImplicit() && !Old->isImplicit()) { in MergeFunctionDecl()
4058 if (New->hasWrittenPrototype()) { in MergeFunctionDecl()
4059 WithProto = New; in MergeFunctionDecl()
4063 WithoutProto = New; in MergeFunctionDecl()
4071 if (WithoutProto == New) in MergeFunctionDecl()
4107 New->setType(NewQType); in MergeFunctionDecl()
4108 New->setHasInheritedPrototype(); in MergeFunctionDecl()
4114 Context, New, SourceLocation(), SourceLocation(), nullptr, in MergeFunctionDecl()
4121 New->setParams(Params); in MergeFunctionDecl()
4124 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4145 Old->hasPrototype() && !New->hasPrototype() && in MergeFunctionDecl()
4146 New->getType()->getAs<FunctionProtoType>() && in MergeFunctionDecl()
4147 Old->getNumParams() == New->getNumParams()) { in MergeFunctionDecl()
4153 = New->getType()->getAs<FunctionProtoType>(); in MergeFunctionDecl()
4162 ParmVarDecl *NewParm = New->getParamDecl(Idx); in MergeFunctionDecl()
4189 New->setType(Context.getFunctionType(MergedReturn, ArgTypes, in MergeFunctionDecl()
4191 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4207 Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New; in MergeFunctionDecl()
4216 Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName(); in MergeFunctionDecl()
4230 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old, in MergeCompatibleFunctionDecls() argument
4233 mergeDeclAttributes(New, Old); in MergeCompatibleFunctionDecls()
4237 New->setPure(); in MergeCompatibleFunctionDecls()
4241 New->setIsUsed(); in MergeCompatibleFunctionDecls()
4245 if (New->getNumParams() == Old->getNumParams()) in MergeCompatibleFunctionDecls()
4246 for (unsigned i = 0, e = New->getNumParams(); i != e; ++i) { in MergeCompatibleFunctionDecls()
4247 ParmVarDecl *NewParam = New->getParamDecl(i); in MergeCompatibleFunctionDecls()
4254 return MergeCXXFunctionDecl(New, Old, S); in MergeCompatibleFunctionDecls()
4259 QualType Merged = Context.mergeTypes(Old->getType(), New->getType()); in MergeCompatibleFunctionDecls()
4261 New->setType(Merged); in MergeCompatibleFunctionDecls()
4289 static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl* Old) { in diagnoseVarDeclTypeMismatch() argument
4290 assert(!S.Context.hasSameType(New->getType(), Old->getType())); in diagnoseVarDeclTypeMismatch()
4292 S.Diag(New->getLocation(), New->isThisDeclarationADefinition() in diagnoseVarDeclTypeMismatch()
4295 << New->getDeclName() << New->getType() << Old->getType(); in diagnoseVarDeclTypeMismatch()
4300 = getNoteDiagForInvalidRedeclaration(Old, New); in diagnoseVarDeclTypeMismatch()
4302 New->setInvalidDecl(); in diagnoseVarDeclTypeMismatch()
4312 void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old, in MergeVarDeclTypes() argument
4314 if (New->isInvalidDecl() || Old->isInvalidDecl()) in MergeVarDeclTypes()
4319 if (New->getType()->isUndeducedType()) { in MergeVarDeclTypes()
4322 } else if (Context.hasSameType(New->getType(), Old->getType())) { in MergeVarDeclTypes()
4324 return MergeVarDeclExceptionSpecs(New, Old); in MergeVarDeclTypes()
4331 else if (Old->getType()->isArrayType() && New->getType()->isArrayType()) { in MergeVarDeclTypes()
4333 const ArrayType *NewArray = Context.getAsArrayType(New->getType()); in MergeVarDeclTypes()
4345 if (!Context.hasSameType(New->getType(), PrevVDTy)) in MergeVarDeclTypes()
4346 return diagnoseVarDeclTypeMismatch(*this, New, PrevVD); in MergeVarDeclTypes()
4353 MergedT = New->getType(); in MergeVarDeclTypes()
4364 else if (New->getType()->isObjCObjectPointerType() && in MergeVarDeclTypes()
4366 MergedT = Context.mergeObjCGCQualifiers(New->getType(), in MergeVarDeclTypes()
4373 MergedT = Context.mergeTypes(New->getType(), Old->getType()); in MergeVarDeclTypes()
4381 if ((New->getType()->isDependentType() || in MergeVarDeclTypes()
4382 Old->getType()->isDependentType()) && New->isLocalVarDecl()) { in MergeVarDeclTypes()
4386 if (!New->getType()->isDependentType() && MergeTypeWithOld) in MergeVarDeclTypes()
4387 New->setType(Context.DependentTy); in MergeVarDeclTypes()
4390 return diagnoseVarDeclTypeMismatch(*this, New, Old); in MergeVarDeclTypes()
4396 New->setType(MergedT); in MergeVarDeclTypes()
4436 void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) { in MergeVarDecl() argument
4438 if (New->isInvalidDecl()) in MergeVarDecl()
4441 if (!shouldLinkPossiblyHiddenDecl(Previous, New)) in MergeVarDecl()
4444 VarTemplateDecl *NewTemplate = New->getDescribedVarTemplate(); in MergeVarDecl()
4457 return New->setInvalidDecl(); in MergeVarDecl()
4463 if (checkUsingShadowRedecl<VarDecl>(*this, Shadow, New)) in MergeVarDecl()
4464 return New->setInvalidDecl(); in MergeVarDecl()
4468 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeVarDecl()
4469 << New->getDeclName(); in MergeVarDecl()
4471 New->getLocation()); in MergeVarDecl()
4472 return New->setInvalidDecl(); in MergeVarDecl()
4477 adjustDeclContextForDeclaratorDecl(New, Old); in MergeVarDecl()
4484 return New->setInvalidDecl(); in MergeVarDecl()
4490 if (Old->isStaticDataMember() && !New->isOutOfLine()) { in MergeVarDecl()
4491 Diag(New->getLocation(), diag::err_duplicate_member) in MergeVarDecl()
4492 << New->getIdentifier(); in MergeVarDecl()
4494 New->setInvalidDecl(); in MergeVarDecl()
4497 mergeDeclAttributes(New, Old); in MergeVarDecl()
4500 if (New->hasAttr<WeakImportAttr>() && in MergeVarDecl()
4503 Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName(); in MergeVarDecl()
4506 New->dropAttr<WeakImportAttr>(); in MergeVarDecl()
4509 if (const auto *ILA = New->getAttr<InternalLinkageAttr>()) in MergeVarDecl()
4511 Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) in MergeVarDecl()
4514 New->dropAttr<InternalLinkageAttr>(); in MergeVarDecl()
4520 MergeVarDeclTypes(New, MostRecent, in MergeVarDecl()
4521 mergeTypeWithPrevious(*this, New, MostRecent, Previous)); in MergeVarDecl()
4522 if (New->isInvalidDecl()) in MergeVarDecl()
4526 MergeVarDeclTypes(New, Old, mergeTypeWithPrevious(*this, New, Old, Previous)); in MergeVarDecl()
4527 if (New->isInvalidDecl()) in MergeVarDecl()
4533 getNoteDiagForInvalidRedeclaration(Old, New); in MergeVarDecl()
4536 if (New->getStorageClass() == SC_Static && in MergeVarDecl()
4537 !New->isStaticDataMember() && in MergeVarDecl()
4540 Diag(New->getLocation(), diag::ext_static_non_static) in MergeVarDecl()
4541 << New->getDeclName(); in MergeVarDecl()
4544 Diag(New->getLocation(), diag::err_static_non_static) in MergeVarDecl()
4545 << New->getDeclName(); in MergeVarDecl()
4547 return New->setInvalidDecl(); in MergeVarDecl()
4559 if (New->hasExternalStorage() && Old->hasLinkage()) in MergeVarDecl()
4561 else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && in MergeVarDecl()
4562 !New->isStaticDataMember() && in MergeVarDecl()
4564 Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName(); in MergeVarDecl()
4566 return New->setInvalidDecl(); in MergeVarDecl()
4570 if (New->hasExternalStorage() && in MergeVarDecl()
4572 Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName(); in MergeVarDecl()
4574 return New->setInvalidDecl(); in MergeVarDecl()
4576 if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && in MergeVarDecl()
4577 !New->hasExternalStorage()) { in MergeVarDecl()
4578 Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName(); in MergeVarDecl()
4580 return New->setInvalidDecl(); in MergeVarDecl()
4583 if (CheckRedeclarationInModule(New, Old)) in MergeVarDecl()
4590 if (!New->hasExternalStorage() && !New->isFileVarDecl() && in MergeVarDecl()
4593 !New->getLexicalDeclContext()->isRecord())) { in MergeVarDecl()
4594 Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName(); in MergeVarDecl()
4596 return New->setInvalidDecl(); in MergeVarDecl()
4599 if (New->isInline() && !Old->getMostRecentDecl()->isInline()) { in MergeVarDecl()
4604 Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New; in MergeVarDecl()
4611 if (!Old->isInline() && New->isInline() && Old->isUsed(false) && in MergeVarDecl()
4612 !Old->getDefinition() && !New->isThisDeclarationADefinition()) in MergeVarDecl()
4616 if (New->getTLSKind() != Old->getTLSKind()) { in MergeVarDecl()
4618 Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName(); in MergeVarDecl()
4620 } else if (!New->getTLSKind()) { in MergeVarDecl()
4621 Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName(); in MergeVarDecl()
4628 Diag(New->getLocation(), diag::err_thread_thread_different_kind) in MergeVarDecl()
4629 << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic); in MergeVarDecl()
4639 Diag(New->getLocation(), in MergeVarDecl()
4641 } else if (New->isThisDeclarationADefinition() == VarDecl::Definition) { in MergeVarDecl()
4643 if (Def && checkVarDeclRedefinition(Def, New)) in MergeVarDecl()
4648 if (haveIncompatibleLanguageLinkages(Old, New)) { in MergeVarDecl()
4649 Diag(New->getLocation(), diag::err_different_language_linkage) << New; in MergeVarDecl()
4651 New->setInvalidDecl(); in MergeVarDecl()
4657 New->setIsUsed(); in MergeVarDecl()
4660 New->setPreviousDecl(Old); in MergeVarDecl()
4665 New->setAccess(Old->getAccess()); in MergeVarDecl()
4667 NewTemplate->setAccess(New->getAccess()); in MergeVarDecl()
4670 New->setImplicitlyInline(); in MergeVarDecl()
4673 void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) { in notePreviousDefinition() argument
4675 auto FNewDecLoc = SrcMgr.getDecomposedLoc(New); in notePreviousDefinition()
4730 bool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) { in checkVarDeclRedefinition() argument
4732 (New->getFormalLinkage() == InternalLinkage || in checkVarDeclRedefinition()
4733 New->isInline() || in checkVarDeclRedefinition()
4734 New->getDescribedVarTemplate() || in checkVarDeclRedefinition()
4735 New->getNumTemplateParameterLists() || in checkVarDeclRedefinition()
4736 New->getDeclContext()->isDependentContext())) { in checkVarDeclRedefinition()
4739 New->demoteThisDefinitionToDeclaration(); in checkVarDeclRedefinition()
4747 Diag(New->getLocation(), diag::err_redefinition) << New; in checkVarDeclRedefinition()
4748 notePreviousDefinition(Old, New->getLocation()); in checkVarDeclRedefinition()
4749 New->setInvalidDecl(); in checkVarDeclRedefinition()
6326 NamedDecl *New; in HandleDeclarator() local
6335 New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous); in HandleDeclarator()
6337 New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous, in HandleDeclarator()
6341 New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous, TemplateParamLists, in HandleDeclarator()
6345 if (!New) in HandleDeclarator()
6350 if (New->getDeclName() && AddToScope) in HandleDeclarator()
6351 PushOnScopeChains(New, S); in HandleDeclarator()
6354 checkDeclIsAllowedInOpenMPTarget(nullptr, New); in HandleDeclarator()
6356 return New; in HandleDeclarator()
10999 MultiVersionKind New) { in MultiVersionTypesCompatible() argument
11000 if (Old == New || Old == MultiVersionKind::None || in MultiVersionTypesCompatible()
11001 New == MultiVersionKind::None) in MultiVersionTypesCompatible()
11005 New == MultiVersionKind::CPUSpecific) || in MultiVersionTypesCompatible()
11007 New == MultiVersionKind::CPUDispatch); in MultiVersionTypesCompatible()
11105 [](const IdentifierInfo *Cur, const IdentifierInfo *New) { in CheckMultiVersionAdditionalDecl() argument
11106 return Cur->getName() == New->getName(); in CheckMultiVersionAdditionalDecl()
11125 [](const IdentifierInfo *Cur, const IdentifierInfo *New) { in CheckMultiVersionAdditionalDecl() argument
11126 return Cur->getName() == New->getName(); in CheckMultiVersionAdditionalDecl()
14279 ParmVarDecl *New = in ActOnParamDeclarator() local
14284 New->setInvalidDecl(); in ActOnParamDeclarator()
14288 New->setScopeInfo(S->getFunctionPrototypeDepth() - 1, in ActOnParamDeclarator()
14292 S->AddDecl(New); in ActOnParamDeclarator()
14294 IdResolver.AddDecl(New); in ActOnParamDeclarator()
14296 ProcessDeclAttributes(S, New, D); in ActOnParamDeclarator()
14299 Diag(New->getLocation(), diag::err_module_private_local) in ActOnParamDeclarator()
14300 << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) in ActOnParamDeclarator()
14303 if (New->hasAttr<BlocksAttr>()) { in ActOnParamDeclarator()
14304 Diag(New->getLocation(), diag::err_block_on_nonlocal); in ActOnParamDeclarator()
14308 deduceOpenCLAddressSpace(New); in ActOnParamDeclarator()
14310 return New; in ActOnParamDeclarator()
14400 ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name, in CheckParameter() local
14407 if (New->isParameterPack()) in CheckParameter()
14409 LSI->LocalPacks.push_back(New); in CheckParameter()
14411 if (New->getType().hasNonTrivialToPrimitiveDestructCUnion() || in CheckParameter()
14412 New->getType().hasNonTrivialToPrimitiveCopyCUnion()) in CheckParameter()
14413 checkNonTrivialCUnion(New->getType(), New->getLocation(), in CheckParameter()
14422 New->setInvalidDecl(); in CheckParameter()
14433 New->setType(T); in CheckParameter()
14446 New->setInvalidDecl(); in CheckParameter()
14451 CheckPPCMMAType(New->getOriginalType(), New->getLocation())) { in CheckParameter()
14452 New->setInvalidDecl(); in CheckParameter()
14455 return New; in CheckParameter()
16272 TagDecl *New = nullptr; in ActOnTag() local
16275 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, nullptr, in ActOnTag()
16281 EnumDecl *ED = cast<EnumDecl>(New); in ActOnTag()
16292 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
16296 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { in ActOnTag()
16311 New->setLexicalDeclContext(CurContext); in ActOnTag()
16312 return New; in ActOnTag()
16740 SkipBody->New = createTagFromNewDecl(); in ActOnTag()
16873 TagDecl *New; in ActOnTag() local
16878 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, in ActOnTag()
16883 StdAlignValT = cast<EnumDecl>(New); in ActOnTag()
16888 if (IsFixed && cast<EnumDecl>(New)->isFixed()) { in ActOnTag()
16894 << New; in ActOnTag()
16907 EnumDecl *ED = cast<EnumDecl>(New); in ActOnTag()
16925 New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
16929 StdBadAlloc = cast<CXXRecordDecl>(New); in ActOnTag()
16931 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
16939 Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) in ActOnTag()
16940 << Context.getTagDeclType(New); in ActOnTag()
16946 Diag(New->getLocation(), diag::err_type_defined_in_enum) in ActOnTag()
16947 << Context.getTagDeclType(New); in ActOnTag()
16961 New->setQualifierInfo(SS.getWithLocInContext(Context)); in ActOnTag()
16963 New->setTemplateParameterListsInfo(Context, TemplateParameterLists); in ActOnTag()
16970 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { in ActOnTag()
16988 Diag(New->getLocation(), diag::err_module_private_specialization) in ActOnTag()
16995 New->setModulePrivate(); in ActOnTag()
17000 if (isMemberSpecialization && CheckMemberSpecialization(New, Previous)) in ActOnTag()
17017 Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New); in ActOnTag()
17022 New->setInvalidDecl(); in ActOnTag()
17026 New->setLexicalDeclContext(CurContext); in ActOnTag()
17033 New->setObjectOfFriendDecl(getLangOpts().MSVCCompat); in ActOnTag()
17037 SetMemberAccessSpecifier(New, PrevDecl, AS); in ActOnTag()
17040 CheckRedeclarationInModule(New, PrevDecl); in ActOnTag()
17043 New->startDefinition(); in ActOnTag()
17045 ProcessDeclAttributeList(S, New, Attrs); in ActOnTag()
17046 AddPragmaAttributes(S, New); in ActOnTag()
17053 New->setAccess(PrevDecl->getAccess()); in ActOnTag()
17055 DeclContext *DC = New->getDeclContext()->getRedeclContext(); in ActOnTag()
17056 DC->makeDeclVisibleInContext(New); in ActOnTag()
17059 PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false); in ActOnTag()
17062 PushOnScopeChains(New, S, true); in ActOnTag()
17064 CurContext->addDecl(New); in ActOnTag()
17068 if (IdentifierInfo *II = New->getIdentifier()) in ActOnTag()
17069 if (!New->isInvalidDecl() && in ActOnTag()
17070 New->getDeclContext()->getRedeclContext()->isTranslationUnit() && in ActOnTag()
17072 Context.setFILEDecl(New); in ActOnTag()
17075 mergeDeclAttributes(New, PrevDecl); in ActOnTag()
17077 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(New)) in ActOnTag()
17082 AddPushedVisibilityAttribute(New); in ActOnTag()
17084 if (isMemberSpecialization && !New->isInvalidDecl()) in ActOnTag()
17085 CompleteMemberSpecialization(New, Previous); in ActOnTag()
17091 if (New->isBeingDefined()) in ActOnTag()
17092 if (auto RD = dyn_cast<RecordDecl>(New)) in ActOnTag()
17098 return New; in ActOnTag()
17117 if (!hasStructuralCompatLayout(Prev, SkipBody.New)) in ActOnDuplicateDefinition()
18716 EnumConstantDecl *New = in ActOnEnumConstant() local
18718 if (!New) in ActOnEnumConstant()
18724 CheckShadow(New, PrevDecl, R); in ActOnEnumConstant()
18742 ProcessDeclAttributeList(S, New, Attrs); in ActOnEnumConstant()
18743 AddPragmaAttributes(S, New); in ActOnEnumConstant()
18746 New->setAccess(TheEnumDecl->getAccess()); in ActOnEnumConstant()
18747 PushOnScopeChains(New, S); in ActOnEnumConstant()
18749 ActOnDocumentableDecl(New); in ActOnEnumConstant()
18751 return New; in ActOnEnumConstant()
19177 FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext, in ActOnFileScopeAsmDecl() local
19180 CurContext->addDecl(New); in ActOnFileScopeAsmDecl()
19181 return New; in ActOnFileScopeAsmDecl()