diff options
author | Guillaume Chatelet <gchatelet@google.com> | 2019-10-29 17:28:34 +0100 |
---|---|---|
committer | Guillaume Chatelet <gchatelet@google.com> | 2019-10-29 17:36:55 +0100 |
commit | 1c85a2e8dc7e76761d301f9a35374e0aafc757ec (patch) | |
tree | 7ccf48d93f8bb2d12e0fecf21625c29bc04bfb45 | |
parent | d6a7da80aae62474c15cad83d361830ffc4e2566 (diff) | |
download | llvm-1c85a2e8dc7e76761d301f9a35374e0aafc757ec.zip llvm-1c85a2e8dc7e76761d301f9a35374e0aafc757ec.tar.gz llvm-1c85a2e8dc7e76761d301f9a35374e0aafc757ec.tar.bz2 |
isBuiltinFunc() uses StringRef instead of const char*
Summary: This prevents a bug when passing nullptr, StringRef ctor would call strlen(nullptr).
Reviewers: vlad.tsyrklevich
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D69569
-rw-r--r-- | clang/include/clang/Basic/Builtins.h | 2 | ||||
-rw-r--r-- | clang/lib/Basic/Builtins.cpp | 3 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 2 |
3 files changed, 3 insertions, 4 deletions
diff --git a/clang/include/clang/Basic/Builtins.h b/clang/include/clang/Basic/Builtins.h index fed0dae..af07d42 100644 --- a/clang/include/clang/Basic/Builtins.h +++ b/clang/include/clang/Basic/Builtins.h @@ -224,7 +224,7 @@ public: /// Returns true if this is a libc/libm function without the '__builtin_' /// prefix. - static bool isBuiltinFunc(const char *Name); + static bool isBuiltinFunc(llvm::StringRef Name); /// Returns true if this is a builtin that can be redeclared. Returns true /// for non-builtins. diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index d23c280..0cd89df 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -47,8 +47,7 @@ void Builtin::Context::InitializeTarget(const TargetInfo &Target, AuxTSRecords = AuxTarget->getTargetBuiltins(); } -bool Builtin::Context::isBuiltinFunc(const char *Name) { - StringRef FuncName(Name); +bool Builtin::Context::isBuiltinFunc(llvm::StringRef FuncName) { for (unsigned i = Builtin::NotBuiltin + 1; i != Builtin::FirstTSBuiltin; ++i) if (FuncName.equals(BuiltinInfo[i].Name)) return strchr(BuiltinInfo[i].Attributes, 'f') != nullptr; diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 99eb23c..7f68d20 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -1096,7 +1096,7 @@ static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) { if (!S.checkStringLiteralArgumentAttr(AL, I, BuiltinName, &LiteralLoc)) return; - if (Builtin::Context::isBuiltinFunc(BuiltinName.data())) + if (Builtin::Context::isBuiltinFunc(BuiltinName)) AddBuiltinName(BuiltinName); else S.Diag(LiteralLoc, diag::warn_attribute_no_builtin_invalid_builtin_name) |