Lines Matching defs:VD

121   auto *VD = dyn_cast_or_null<VarDecl>(D);
122 if (VD && VD->hasGlobalStorage() && !VD->isStaticLocal()) {
124 if ((hasAttr<CUDADeviceAttr>(VD, /*IgnoreImplicit=*/true) &&
125 !hasAttr<CUDAHostAttr>(VD, /*IgnoreImplicit=*/true)) ||
126 hasAttr<CUDASharedAttr>(VD, /*IgnoreImplicit=*/true) ||
127 hasAttr<CUDAConstantAttr>(VD, /*IgnoreImplicit=*/true))
129 S.CurCUDATargetCtx = {Target, K, VD};
607 bool IsDependentVar(VarDecl *VD) {
608 if (VD->getType()->isDependentType())
610 if (const auto *Init = VD->getInit())
616 // variable with global storage. \p VD may be a host variable to be checked for
624 bool HasAllowedCUDADeviceStaticInitializer(SemaCUDA &S, VarDecl *VD,
626 assert(!VD->isInvalidDecl() && VD->hasGlobalStorage());
627 assert(!IsDependentVar(VD) && "do not check dependent var");
628 const Expr *Init = VD->getInit();
633 return S.isEmptyConstructor(VD->getLocation(), CE->getConstructor());
642 VD->getType()->isReferenceType());
644 auto HasEmptyDtor = [&](VarDecl *VD) {
645 if (const auto *RD = VD->getType()->getAsCXXRecordDecl())
646 return S.isEmptyDestructor(VD->getLocation(), RD->getDestructor());
650 return IsEmptyInit(Init) && HasEmptyDtor(VD);
652 ((IsEmptyInit(Init) || IsConstantInit(Init)) && HasEmptyDtor(VD));
656 void SemaCUDA::checkAllowedInitializer(VarDecl *VD) {
657 // Return early if VD is inside a non-instantiated template function since
660 dyn_cast_or_null<FunctionDecl>(VD->getDeclContext());
666 if (VD->isInvalidDecl() || !VD->hasInit() || !VD->hasGlobalStorage() ||
667 IsDependentVar(VD))
669 const Expr *Init = VD->getInit();
670 bool IsSharedVar = VD->hasAttr<CUDASharedAttr>();
673 (VD->hasAttr<CUDADeviceAttr>() || VD->hasAttr<CUDAConstantAttr>());
676 *this, VD, IsSharedVar ? CICK_Shared : CICK_DeviceOrConstant))
678 Diag(VD->getLocation(),
681 VD->setInvalidDecl();
695 Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer)
698 VD->setInvalidDecl();
803 void SemaCUDA::MaybeAddConstantAttr(VarDecl *VD) {
806 if (getLangOpts().CUDAIsDevice && !VD->hasAttr<CUDAConstantAttr>() &&
807 !VD->hasAttr<CUDASharedAttr>() &&
808 (VD->isFileVarDecl() || VD->isStaticDataMember()) &&
809 !IsDependentVar(VD) &&
810 ((VD->isConstexpr() || VD->getType().isConstQualified()) &&
811 HasAllowedCUDADeviceStaticInitializer(*this, VD,
813 VD->addAttr(CUDAConstantAttr::CreateImplicit(getASTContext()));