summaryrefslogtreecommitdiffstats
path: root/clang/lib/ASTMatchers/Dynamic
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-12-08 23:29:59 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-12-08 23:29:59 +0000
commit354abec3e6b6132c9456de39951e8de0632771cc (patch)
tree191681e24af3adddd85524ec72439ac5c192d3f5 /clang/lib/ASTMatchers/Dynamic
parenta5370fb82c8e2f9e7676a78677d2730b2512a082 (diff)
downloadbcm5719-llvm-354abec3e6b6132c9456de39951e8de0632771cc.tar.gz
bcm5719-llvm-354abec3e6b6132c9456de39951e8de0632771cc.zip
Remove creation of out-of-bounds value of enumeration type (resulting in UB).
Also remove unnecessary initialization of out-parameters with this value, so that MSan is able to catch errors appropriately. llvm-svn: 320212
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic')
-rw-r--r--clang/lib/ASTMatchers/Dynamic/Marshallers.h22
1 files changed, 10 insertions, 12 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Marshallers.h b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
index d5626b22187..af90e2c7eca 100644
--- a/clang/lib/ASTMatchers/Dynamic/Marshallers.h
+++ b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
@@ -122,21 +122,20 @@ template <> struct ArgTypeTraits<unsigned> {
template <> struct ArgTypeTraits<attr::Kind> {
private:
- static attr::Kind getAttrKind(llvm::StringRef AttrKind) {
- return llvm::StringSwitch<attr::Kind>(AttrKind)
+ static Optional<attr::Kind> getAttrKind(llvm::StringRef AttrKind) {
+ return llvm::StringSwitch<Optional<attr::Kind>>(AttrKind)
#define ATTR(X) .Case("attr::" #X, attr:: X)
#include "clang/Basic/AttrList.inc"
- .Default(attr::Kind(-1));
+ .Default(llvm::None);
}
public:
static bool is(const VariantValue &Value) {
- return Value.isString() &&
- getAttrKind(Value.getString()) != attr::Kind(-1);
+ return Value.isString() && getAttrKind(Value.getString());
}
static attr::Kind get(const VariantValue &Value) {
- return getAttrKind(Value.getString());
+ return *getAttrKind(Value.getString());
}
static ArgKind getKind() {
@@ -146,21 +145,20 @@ public:
template <> struct ArgTypeTraits<CastKind> {
private:
- static CastKind getCastKind(llvm::StringRef AttrKind) {
- return llvm::StringSwitch<CastKind>(AttrKind)
+ static Optional<CastKind> getCastKind(llvm::StringRef AttrKind) {
+ return llvm::StringSwitch<Optional<CastKind>>(AttrKind)
#define CAST_OPERATION(Name) .Case( #Name, CK_##Name)
#include "clang/AST/OperationKinds.def"
- .Default(CK_Invalid);
+ .Default(llvm::None);
}
public:
static bool is(const VariantValue &Value) {
- return Value.isString() &&
- getCastKind(Value.getString()) != CK_Invalid;
+ return Value.isString() && getCastKind(Value.getString());
}
static CastKind get(const VariantValue &Value) {
- return getCastKind(Value.getString());
+ return *getCastKind(Value.getString());
}
static ArgKind getKind() {
OpenPOWER on IntegriCloud