Fix LLVMContext to match what MDKind names that the LL parser permits. Fixes PR21799!

llvm-svn: 223995
This commit is contained in:
Nick Lewycky 2014-12-11 02:10:28 +00:00
parent 1e30897497
commit dde76ff09c
2 changed files with 3 additions and 21 deletions

View File

@ -229,28 +229,10 @@ void LLVMContext::emitError(unsigned LocCookie, const Twine &ErrorStr) {
// Metadata Kind Uniquing // Metadata Kind Uniquing
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef NDEBUG
/// isValidName - Return true if Name is a valid custom metadata handler name.
static bool isValidName(StringRef MDName) {
if (MDName.empty())
return false;
if (!std::isalpha(static_cast<unsigned char>(MDName[0])))
return false;
for (StringRef::iterator I = MDName.begin() + 1, E = MDName.end(); I != E;
++I) {
if (!std::isalnum(static_cast<unsigned char>(*I)) && *I != '_' &&
*I != '-' && *I != '.')
return false;
}
return true;
}
#endif
/// getMDKindID - Return a unique non-zero ID for the specified metadata kind. /// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
unsigned LLVMContext::getMDKindID(StringRef Name) const { unsigned LLVMContext::getMDKindID(StringRef Name) const {
assert(isValidName(Name) && "Invalid MDNode name"); assert(!std::isdigit(Name.front()) &&
"Named metadata may not start with a digit");
// If this is new, assign it its ID. // If this is new, assign it its ID.
return pImpl->CustomMDKindNames.insert(std::make_pair( return pImpl->CustomMDKindNames.insert(std::make_pair(

View File

@ -5,7 +5,7 @@ define void @foo(i32 %x) {
call void @llvm.zonk(metadata !{i32 %x}, i64 0, metadata !1) call void @llvm.zonk(metadata !{i32 %x}, i64 0, metadata !1)
store i32 0, i32* null, !whatever !0, !whatever_else !{}, !more !{metadata !"hello"} store i32 0, i32* null, !whatever !0, !whatever_else !{}, !more !{metadata !"hello"}
store i32 0, i32* null, !whatever !{metadata !"hello", metadata !1, metadata !{}, metadata !2} store i32 0, i32* null, !whatever !{metadata !"hello", metadata !1, metadata !{}, metadata !2}
ret void ret void, !_1 !0
} }
declare void @llvm.zonk(metadata, i64, metadata) nounwind readnone declare void @llvm.zonk(metadata, i64, metadata) nounwind readnone