diff options
author | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2022-05-17 15:12:03 -0400 |
---|---|---|
committer | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2022-05-19 11:34:42 -0400 |
commit | cefe472c51fbcd1aed4d4a090709f25a12a8bc2c (patch) | |
tree | 48abef7e526cf511a39a7fa6ee4a9d7acfab82d6 /clang/lib/Basic/Builtins.cpp | |
parent | 3ed9f603fd59cafe3ab864d8bb77349ed418d384 (diff) | |
download | llvm-cefe472c51fbcd1aed4d4a090709f25a12a8bc2c.zip llvm-cefe472c51fbcd1aed4d4a090709f25a12a8bc2c.tar.gz llvm-cefe472c51fbcd1aed4d4a090709f25a12a8bc2c.tar.bz2 |
[clang] Fix __has_builtin
Fix __has_builtin to return 1 only if the requested target features
of a builtin are enabled by refactoring the code for checking
required target features of a builtin and use it in evaluation
of __has_builtin.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D125829
Diffstat (limited to 'clang/lib/Basic/Builtins.cpp')
-rw-r--r-- | clang/lib/Basic/Builtins.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index ef8bb56..b42e8f4 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// #include "clang/Basic/Builtins.h" +#include "BuiltinTargetFeatures.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/LangOptions.h" #include "clang/Basic/TargetInfo.h" @@ -211,3 +212,14 @@ bool Builtin::Context::canBeRedeclared(unsigned ID) const { (!hasReferenceArgsOrResult(ID) && !hasCustomTypechecking(ID)) || isInStdNamespace(ID); } + +bool Builtin::evaluateRequiredTargetFeatures( + StringRef RequiredFeatures, const llvm::StringMap<bool> &TargetFetureMap) { + // Return true if the builtin doesn't have any required features. + if (RequiredFeatures.empty()) + return true; + assert(!RequiredFeatures.contains(' ') && "Space in feature list"); + + TargetFeatures TF(TargetFetureMap); + return TF.hasRequiredFeatures(RequiredFeatures); +} |