summaryrefslogtreecommitdiffstats
path: root/llvm/lib/AsmParser/LLParser.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-13 01:17:35 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-13 01:17:35 +0000
commitcd6636c3bf05e86396b097ce1623ab9993d5adcb (patch)
tree440463e3b81aafeefc8090ad6aad10a8a8289160 /llvm/lib/AsmParser/LLParser.cpp
parent09e03f38d664ed09b6add37050c2df6cf1116272 (diff)
downloadbcm5719-llvm-cd6636c3bf05e86396b097ce1623ab9993d5adcb.tar.gz
bcm5719-llvm-cd6636c3bf05e86396b097ce1623ab9993d5adcb.zip
AsmWriter: MDBasicType: Recognize DW_ATE in 'encoding'
llvm-svn: 229006
Diffstat (limited to 'llvm/lib/AsmParser/LLParser.cpp')
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 802421356ad..992ad1092be 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -2946,6 +2946,9 @@ struct ColumnField : public MDUnsignedField {
struct DwarfTagField : public MDUnsignedField {
DwarfTagField() : MDUnsignedField(0, dwarf::DW_TAG_hi_user) {}
};
+struct DwarfAttEncodingField : public MDUnsignedField {
+ DwarfAttEncodingField() : MDUnsignedField(0, dwarf::DW_ATE_hi_user) {}
+};
struct MDSignedField : public MDFieldImpl<int64_t> {
int64_t Min;
@@ -3016,6 +3019,25 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) {
template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
+ DwarfAttEncodingField &Result) {
+ if (Lex.getKind() == lltok::APSInt)
+ return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
+
+ if (Lex.getKind() != lltok::DwarfAttEncoding)
+ return TokError("expected DWARF type attribute encoding");
+
+ unsigned Encoding = dwarf::getAttributeEncoding(Lex.getStrVal());
+ if (!Encoding)
+ return TokError("invalid DWARF type attribute encoding" + Twine(" '") +
+ Lex.getStrVal() + "'");
+ assert(Encoding <= Result.Max && "Expected valid DWARF language");
+ Result.assign(Encoding);
+ Lex.Lex();
+ return false;
+}
+
+template <>
+bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
MDSignedField &Result) {
if (Lex.getKind() != lltok::APSInt)
return TokError("expected signed integer");
@@ -3202,7 +3224,7 @@ bool LLParser::ParseMDBasicType(MDNode *&Result, bool IsDistinct) {
OPTIONAL(name, MDStringField, ); \
OPTIONAL(size, MDUnsignedField, (0, UINT32_MAX)); \
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
- OPTIONAL(encoding, MDUnsignedField, (0, UINT32_MAX));
+ OPTIONAL(encoding, DwarfAttEncodingField, );
PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS
OpenPOWER on IntegriCloud