(S->getBeginLoc().isMacroID())
29 if(S->getEndLoc().isMacroID())
32 for(
const Stmt*Child : S->children())
43 if(DR && isa<EnumConstantDecl>(DR->
getDecl()))
46 for(
const Stmt*Child : S->children())
59 if(VD->isStaticLocal())
62 for(
const Stmt*Child : S->children())
71 if(isa<OffsetOfExpr>(S))
74 for(
const Stmt*Child : S->children())
82std::pair<const clang::VarDecl *, const clang::Expr *>
85 const Expr*RHS =
nullptr;
87 if(
autoAssign = dyn_cast_or_null<BinaryOperator>(S)) {
88 if(Assign->isAssignmentOp()) {
90RHS = Assign->getRHS();
91 if(
autoDE = dyn_cast_or_null<DeclRefExpr>(Assign->getLHS()))
92VD = dyn_cast_or_null<VarDecl>(DE->getDecl());
94}
else if(
autoPD = dyn_cast_or_null<DeclStmt>(S)) {
96assert(PD->isSingleDecl() &&
"We process decls one by one");
97VD = cast<VarDecl>(PD->getSingleDecl());
101 returnstd::make_pair(VD, RHS);
108 if(AttrType->getAttrKind() == attr::TypeNullable)
110 else if(AttrType->getAttrKind() == attr::TypeNonNull)
124std::vector<Token> FilteredTokens;
125FilteredTokens.reserve(MI->
tokens().size());
126 for(
auto&
T: MI->
tokens())
127 if(!
T.isOneOf(tok::l_paren, tok::r_paren))
128FilteredTokens.push_back(
T);
131 const Token&
T= FilteredTokens.back();
134 if(!
T.isLiteral() || !
T.getLiteralData())
136StringRef ValueStr = StringRef(
T.getLiteralData(),
T.getLength());
137llvm::APInt IntValue;
138 constexpr unsignedAutoSenseRadix = 0;
139 if(ValueStr.getAsInteger(AutoSenseRadix, IntValue))
143 size_tSize = FilteredTokens.size();
145 if(FilteredTokens[Size - 2].is(tok::minus))
146IntValue = -IntValue;
149 returnIntValue.getSExtValue();
154llvm::StringMap<BinaryOperatorKind> BinOps{
155#define BINARY_OPERATION(Name, Spelling) {Spelling, BO_##Name}, 156#include "clang/AST/OperationKinds.def" 158llvm::StringMap<UnaryOperatorKind> UnOps{
159#define UNARY_OPERATION(Name, Spelling) {Spelling, UO_##Name}, 160#include "clang/AST/OperationKinds.def" 164#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly) \ 167 auto BinOpIt = BinOps.find(Spelling); \ 168 if (BinOpIt != BinOps.end()) \ 169 return OperatorKind(BinOpIt->second); \ 171 llvm_unreachable("operator was expected to be binary but is not"); \
173auto UnOpIt = UnOps.find(Spelling); \
174if (UnOpIt != UnOps.end()) \
175return OperatorKind(UnOpIt->second); \
177llvm_unreachable("operator was expected to be unary but is not"); \
180#include "clang/Basic/OperatorKinds.def" 182llvm_unreachable(
"unexpected operator kind");
188 returnState->getSVal(Ptr);
196 if(
const auto*NS = dyn_cast<NamespaceDecl>(DC);
197NS && NS->isStdNamespace())
Defines the clang::Preprocessor interface.
An attributed type is a type to which a type attribute has been applied.
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
DeclContext * getParent()
getParent - Returns the containing DeclContext.
A reference to a declared variable, function, enum, etc.
Decl - This represents one declaration (or definition), e.g.
This represents one expression.
Encapsulates the data about a macro definition (e.g.
ArrayRef< Token > tokens() const
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
const MacroInfo * getMacroInfo(const IdentifierInfo *II) const
IdentifierInfo * getIdentifierInfo(StringRef Name) const
Return information about the specified preprocessor identifier token.
A (possibly-)qualified type.
Stmt - This represents one statement.
Token - This structure provides full information about a lexed token.
The base class of the type hierarchy.
const T * getAs() const
Member-template getAs<specific type>'.
Represents a variable declaration or definition.
const Expr * getAnyInitializer() const
Get the initializer for this variable, no matter which declaration it is attached to.
SVal - This represents a symbolic expression, which can be either an L-value or an R-value.
const MemRegion * getAsRegion() const
bool containsEnum(const Stmt *S)
Nullability getNullabilityAnnotation(QualType Type)
Get nullability annotation for a given type.
bool isWithinStdNamespace(const Decl *D)
Returns true if declaration D is in std namespace or any nested namespace or class scope.
bool containsStaticLocal(const Stmt *S)
std::pair< const clang::VarDecl *, const clang::Expr * > parseAssignment(const Stmt *S)
OperatorKind operationKindFromOverloadedOperator(OverloadedOperatorKind OOK, bool IsBinary)
bool containsBuiltinOffsetOf(const Stmt *S)
std::optional< SVal > getPointeeVal(SVal PtrSVal, ProgramStateRef State)
std::optional< int > tryExpandAsInteger(StringRef Macro, const Preprocessor &PP)
Try to parse the value of a defined preprocessor macro.
bool containsMacro(const Stmt *S)
The JSON file list parser is used to communicate input to InstallAPI.
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
const FunctionProtoType * T
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4