[MS Demangler] Print public:, protected:, private: if set in FunctionClass or a variable's StorageClass.

undname prints them, and the information is in the decorated name, so we probably shouldn't lose it when undecorating.

I spot-checked a few of the funnier-looking outputs, and undname has the same output.

Differential Revision: https://reviews.llvm.org/D54396

llvm-svn: 346791
diff --git a/llvm/test/Demangle/ms-nested-scopes.test b/llvm/test/Demangle/ms-nested-scopes.test
index 952b138..450ab66 100644
--- a/llvm/test/Demangle/ms-nested-scopes.test
+++ b/llvm/test/Demangle/ms-nested-scopes.test
@@ -81,10 +81,10 @@
 ; CHECK: int `int __cdecl M(void)'::`2'::M
 
 ?L@?2??M@0?2??0@YAHXZ@QEAAHXZ@4HA
-; CHECK: int `int __cdecl `int __cdecl L(void)'::`3'::L::M(void)'::`3'::L
+; CHECK: int `public: int __cdecl `int __cdecl L(void)'::`3'::L::M(void)'::`3'::L
 
 ?M@?2??0L@?2??1@YAHXZ@QEAAHXZ@4HA
-; CHECK: int `int __cdecl `int __cdecl L(void)'::`3'::L::M(void)'::`3'::M
+; CHECK: int `public: int __cdecl `int __cdecl L(void)'::`3'::L::M(void)'::`3'::M
 
 ; Function local scopes of template functions
 ?M@?1???$L@H@@YAHXZ@4HA
@@ -95,16 +95,16 @@
 ; CHECK: int __cdecl NS::NS<int>::SN(void)
 
 ?NS@?1??SN@?$NS@H@0@QEAAHXZ@4HA
-; CHECK: int `int __cdecl NS::NS<int>::SN(void)'::`2'::NS
+; CHECK: int `public: int __cdecl NS::NS<int>::SN(void)'::`2'::NS
 
 ?SN@?1??0?$NS@H@NS@@QEAAHXZ@4HA
-; CHECK: int `int __cdecl NS::NS<int>::SN(void)'::`2'::SN
+; CHECK: int `public: int __cdecl NS::NS<int>::SN(void)'::`2'::SN
 
 ?NS@?1??SN@?$NS@H@10@QEAAHXZ@4HA
-; CHECK: int `int __cdecl NS::SN::NS<int>::SN(void)'::`2'::NS
+; CHECK: int `public: int __cdecl NS::SN::NS<int>::SN(void)'::`2'::NS
 
 ?SN@?1??0?$NS@H@0NS@@QEAAHXZ@4HA
-; CHECK: int `int __cdecl NS::SN::NS<int>::SN(void)'::`2'::SN
+; CHECK: int `public: int __cdecl NS::SN::NS<int>::SN(void)'::`2'::SN
 
 ; Make sure instantiated templates participate in back-referencing.
 ; In the next 3 examples there should be 3 back-references:
@@ -137,10 +137,10 @@
 ; } } } } }
 
 ?C@?1??B@?$C@H@0101A@@QEAAHXZ@4U201013@A
-; CHECK: struct A::B::C::B::C::C<int> `int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::C
+; CHECK: struct A::B::C::B::C::C<int> `public: int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::C
 
 ?B@?1??0?$C@H@C@020A@@QEAAHXZ@4HA
-; CHECK: int `int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::B
+; CHECK: int `public: int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::B
 
 ?A@?1??B@?$C@H@C@1310@QEAAHXZ@4HA
-; CHECK: int `int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::A
+; CHECK: int `public: int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::A