aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2019-10-29 17:28:34 +0100
committerGuillaume Chatelet <gchatelet@google.com>2019-10-29 17:36:55 +0100
commit1c85a2e8dc7e76761d301f9a35374e0aafc757ec (patch)
tree7ccf48d93f8bb2d12e0fecf21625c29bc04bfb45
parentd6a7da80aae62474c15cad83d361830ffc4e2566 (diff)
downloadllvm-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.h2
-rw-r--r--clang/lib/Basic/Builtins.cpp3
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp2
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)