Skip to content

Commit 7d8a448

Browse files
committed
[clang][bytecode][NFC] Only collect non-null args if we have to
Only do this if the function really has a NonNullArg.
1 parent ca513ee commit 7d8a448

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

clang/lib/AST/ByteCode/Compiler.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2038,7 +2038,12 @@ bool Compiler<Emitter>::visitCallArgs(ArrayRef<const Expr *> Args,
20382038
const FunctionDecl *FuncDecl,
20392039
bool Activate) {
20402040
assert(VarScope->getKind() == ScopeKind::Call);
2041-
llvm::BitVector NonNullArgs = collectNonNullArgs(FuncDecl, Args);
2041+
bool HasNonNullAttr = false;
2042+
llvm::BitVector NonNullArgs;
2043+
if (FuncDecl && FuncDecl->hasAttr<NonNullAttr>()) {
2044+
HasNonNullAttr = true;
2045+
NonNullArgs = collectNonNullArgs(FuncDecl, Args);
2046+
}
20422047

20432048
unsigned ArgIndex = 0;
20442049
for (const Expr *Arg : Args) {
@@ -2064,7 +2069,7 @@ bool Compiler<Emitter>::visitCallArgs(ArrayRef<const Expr *> Args,
20642069
return false;
20652070
}
20662071

2067-
if (FuncDecl && NonNullArgs[ArgIndex]) {
2072+
if (FuncDecl && HasNonNullAttr && NonNullArgs[ArgIndex]) {
20682073
PrimType ArgT = classify(Arg).value_or(PT_Ptr);
20692074
if (ArgT == PT_Ptr) {
20702075
if (!this->emitCheckNonNullArg(ArgT, Arg))

clang/lib/AST/ByteCode/InterpShared.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@ namespace interp {
1616
llvm::BitVector collectNonNullArgs(const FunctionDecl *F,
1717
ArrayRef<const Expr *> Args) {
1818
llvm::BitVector NonNullArgs;
19-
if (!F)
20-
return NonNullArgs;
2119

2220
assert(F);
21+
assert(F->hasAttr<NonNullAttr>());
2322
NonNullArgs.resize(Args.size());
2423

2524
for (const auto *Attr : F->specific_attrs<NonNullAttr>()) {
2625
if (!Attr->args_size()) {
2726
NonNullArgs.set();
2827
break;
29-
} else
30-
for (auto Idx : Attr->args()) {
31-
unsigned ASTIdx = Idx.getASTIndex();
32-
if (ASTIdx >= Args.size())
33-
continue;
34-
NonNullArgs[ASTIdx] = true;
35-
}
28+
}
29+
30+
for (auto Idx : Attr->args()) {
31+
unsigned ASTIdx = Idx.getASTIndex();
32+
if (ASTIdx >= Args.size())
33+
continue;
34+
NonNullArgs[ASTIdx] = true;
35+
}
3636
}
3737

3838
return NonNullArgs;

0 commit comments

Comments
 (0)