diff options
author | Tamas Berghammer <tberghammer@google.com> | 2017-05-24 11:29:02 +0000 |
---|---|---|
committer | Tamas Berghammer <tberghammer@google.com> | 2017-05-24 11:29:02 +0000 |
commit | e3852fa4052cef4715acebcffe2e18e2ff8b76b8 (patch) | |
tree | 6684232260083de1584d3f991a2d508e058959a3 /llvm/lib/Demangle/ItaniumDemangle.cpp | |
parent | 8bc9b88a241c617ad25f3d8d728d9b5581bd86a9 (diff) | |
download | bcm5719-llvm-e3852fa4052cef4715acebcffe2e18e2ff8b76b8.tar.gz bcm5719-llvm-e3852fa4052cef4715acebcffe2e18e2ff8b76b8.zip |
Demangler: Fix constructor cv qualifier handling
Previously if we parsed a constructor then we set parsed_ctor_dtor_cv
to true and never reseted it. This causes issue when a template argument
references a constructor (e.g. type of lambda defined inside a
constructor) as we will have the parsed_ctor_dtor_cv flag set what will
cause issues when parsing later arguments.
Differential Revision: https://reviews.llvm.org/D33385
libcxxabi change: https://reviews.llvm.org/rL303737
llvm-svn: 303738
Diffstat (limited to 'llvm/lib/Demangle/ItaniumDemangle.cpp')
-rw-r--r-- | llvm/lib/Demangle/ItaniumDemangle.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/Demangle/ItaniumDemangle.cpp b/llvm/lib/Demangle/ItaniumDemangle.cpp index f454ae61d96..d6e76e49c0f 100644 --- a/llvm/lib/Demangle/ItaniumDemangle.cpp +++ b/llvm/lib/Demangle/ItaniumDemangle.cpp @@ -4030,6 +4030,8 @@ static const char *parse_encoding(const char *first, const char *last, C &db) { save_value<decltype(db.tag_templates)> sb(db.tag_templates); if (db.encoding_depth > 1) db.tag_templates = true; + save_value<decltype(db.parsed_ctor_dtor_cv)> sp(db.parsed_ctor_dtor_cv); + db.parsed_ctor_dtor_cv = false; switch (*first) { case 'G': case 'T': |