aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/AST/TypePrinter.cpp1
-rw-r--r--test/SemaCXX/ast-print.cpp17
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp
index 4cf4b1847f..90b2ca9cce 100644
--- a/lib/AST/TypePrinter.cpp
+++ b/lib/AST/TypePrinter.cpp
@@ -799,6 +799,7 @@ void TypePrinter::printAtomicAfter(const AtomicType *T, raw_ostream &OS) { }
/// Appends the given scope to the end of a string.
void TypePrinter::AppendScope(DeclContext *DC, raw_ostream &OS) {
if (DC->isTranslationUnit()) return;
+ if (DC->isFunctionOrMethod()) return;
AppendScope(DC->getParent(), OS);
if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(DC)) {
diff --git a/test/SemaCXX/ast-print.cpp b/test/SemaCXX/ast-print.cpp
index 0dad623d47..aeb4039d59 100644
--- a/test/SemaCXX/ast-print.cpp
+++ b/test/SemaCXX/ast-print.cpp
@@ -64,3 +64,20 @@ template <class S> void test7()
// CHECK: t.~T();
template <typename T> void test8(T t) { t.~T(); }
+
+
+// CHECK: enum E {
+// CHECK-NEXT: A,
+// CHECK-NEXT: B,
+// CHECK-NEXT: C
+// CHECK-NEXT: };
+// CHECK-NEXT: {{^[ ]+}}E a = A;
+
+struct test9
+{
+ void f()
+ {
+ enum E { A, B, C };
+ E a = A;
+ }
+};