//===--- InterpShared.cpp ---------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "InterpShared.h" #include "clang/AST/Attr.h" #include "llvm/ADT/BitVector.h" namespace clang { namespace interp { llvm::BitVector collectNonNullArgs(const FunctionDecl *F, const llvm::ArrayRef &Args) { llvm::BitVector NonNullArgs; if (!F) return NonNullArgs; assert(F); NonNullArgs.resize(Args.size()); for (const auto *Attr : F->specific_attrs()) { if (!Attr->args_size()) { NonNullArgs.set(); break; } else for (auto Idx : Attr->args()) { unsigned ASTIdx = Idx.getASTIndex(); if (ASTIdx >= Args.size()) continue; NonNullArgs[ASTIdx] = true; } } return NonNullArgs; } } // namespace interp } // namespace clang