This revision was automatically updated to reflect the committed changes.
Closed by commit rG3c3048c18b09: Include the mangled name in -ast-dump=json 
(authored by Alex Richardson <alexander.richard...@cl.cam.ac.uk>).

Changed prior to commit:
  https://reviews.llvm.org/D69564?vs=226893&id=229514#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69564/new/

https://reviews.llvm.org/D69564

Files:
  clang/include/clang/AST/JSONNodeDumper.h
  clang/lib/AST/JSONNodeDumper.cpp
  clang/test/AST/ast-dump-decl-context-json.cpp
  clang/test/AST/ast-dump-decl-json.c
  clang/test/AST/ast-dump-decl-json.m
  clang/test/AST/ast-dump-expr-json.c
  clang/test/AST/ast-dump-expr-json.cpp
  clang/test/AST/ast-dump-expr-json.m
  clang/test/AST/ast-dump-funcs-json.cpp
  clang/test/AST/ast-dump-if-json.cpp
  clang/test/AST/ast-dump-macro-json.c
  clang/test/AST/ast-dump-record-definition-data-json.cpp
  clang/test/AST/ast-dump-records-json.cpp
  clang/test/AST/ast-dump-stmt-json.c
  clang/test/AST/ast-dump-stmt-json.cpp
  clang/test/AST/ast-dump-stmt-json.m
  clang/test/AST/ast-dump-template-decls-json.cpp

Index: clang/test/AST/ast-dump-template-decls-json.cpp
===================================================================
--- clang/test/AST/ast-dump-template-decls-json.cpp
+++ clang/test/AST/ast-dump-template-decls-json.cpp
@@ -588,6 +588,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "previousDecl": "0x{{.*}}",
 // CHECK-NEXT:    "name": "c",
+// CHECK-NEXT:    "mangledName": "_Z1cIfiEvT_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (float)"
 // CHECK-NEXT:    },
@@ -1017,6 +1018,7 @@
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "name": "i",
+// CHECK-NEXT:        "mangledName": "_ZZ1fiE1i",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "int"
 // CHECK-NEXT:        },
Index: clang/test/AST/ast-dump-stmt-json.m
===================================================================
--- clang/test/AST/ast-dump-stmt-json.m
+++ clang/test/AST/ast-dump-stmt-json.m
@@ -44,6 +44,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestBlockExpr",
+// CHECK-NEXT:  "mangledName": "TestBlockExpr",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -71,6 +72,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "x",
+// CHECK-NEXT:    "mangledName": "x",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -275,6 +277,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestExprWithCleanup",
+// CHECK-NEXT:  "mangledName": "TestExprWithCleanup",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -302,6 +305,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "x",
+// CHECK-NEXT:    "mangledName": "x",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -506,6 +510,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCAtCatchStmt",
+// CHECK-NEXT:  "mangledName": "TestObjCAtCatchStmt",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -603,6 +608,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "a",
+// CHECK-NEXT:          "mangledName": "a",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "A *"
 // CHECK-NEXT:          }
@@ -749,6 +755,7 @@
 // CHECK-NEXT:              },
 // CHECK-NEXT:              "isImplicit": true,
 // CHECK-NEXT:              "name": "__context",
+// CHECK-NEXT:              "mangledName": "__context",
 // CHECK-NEXT:              "type": {
 // CHECK-NEXT:               "qualType": "struct (anonymous at {{.*}}:18:14) *"
 // CHECK-NEXT:              }
Index: clang/test/AST/ast-dump-stmt-json.cpp
===================================================================
--- clang/test/AST/ast-dump-stmt-json.cpp
+++ clang/test/AST/ast-dump-stmt-json.cpp
@@ -147,6 +147,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "function",
+// CHECK-NEXT:  "mangledName": "_ZN1n8functionEv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -298,6 +299,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunction",
+// CHECK-NEXT:  "mangledName": "_Z12TestFunctionv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -358,6 +360,7 @@
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "name": "f",
+// CHECK-NEXT:        "mangledName": "_ZZ12TestFunctionvE1f",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "void (*)()"
 // CHECK-NEXT:        },
@@ -530,6 +533,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestCatch1",
+// CHECK-NEXT:  "mangledName": "_Z10TestCatch1v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -628,6 +632,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "x",
+// CHECK-NEXT:          "mangledName": "_ZZ10TestCatch1vE1x",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          }
@@ -680,6 +685,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestCatch2",
+// CHECK-NEXT:  "mangledName": "_Z10TestCatch2v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -808,6 +814,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestAllocationExprs",
+// CHECK-NEXT:  "mangledName": "_Z19TestAllocationExprsv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -869,6 +876,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "p",
+// CHECK-NEXT:        "mangledName": "_ZZ19TestAllocationExprsvE1p",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "int *"
 // CHECK-NEXT:        }
@@ -1427,6 +1435,7 @@
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "operator new",
+// CHECK-NEXT:  "mangledName": "_Znwm",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void *(unsigned long)"
 // CHECK-NEXT:  },
@@ -1465,6 +1474,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "name": "operator new",
+// CHECK-NEXT:  "mangledName": "_ZnwmSt11align_val_t",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void *(unsigned long, std::align_val_t)"
 // CHECK-NEXT:  },
@@ -1517,6 +1527,7 @@
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "operator new[]",
+// CHECK-NEXT:  "mangledName": "_Znam",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void *(unsigned long)"
 // CHECK-NEXT:  },
@@ -1555,6 +1566,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "name": "operator new[]",
+// CHECK-NEXT:  "mangledName": "_ZnamSt11align_val_t",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void *(unsigned long, std::align_val_t)"
 // CHECK-NEXT:  },
@@ -1607,6 +1619,7 @@
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "operator delete",
+// CHECK-NEXT:  "mangledName": "_ZdlPv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void *) noexcept"
 // CHECK-NEXT:  },
@@ -1645,6 +1658,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "name": "operator delete",
+// CHECK-NEXT:  "mangledName": "_ZdlPvSt11align_val_t",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void *, std::align_val_t) noexcept"
 // CHECK-NEXT:  },
@@ -1697,6 +1711,7 @@
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "operator delete[]",
+// CHECK-NEXT:  "mangledName": "_ZdaPv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void *) noexcept"
 // CHECK-NEXT:  },
@@ -1735,6 +1750,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isImplicit": true,
 // CHECK-NEXT:  "name": "operator delete[]",
+// CHECK-NEXT:  "mangledName": "_ZdaPvSt11align_val_t",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void *, std::align_val_t) noexcept"
 // CHECK-NEXT:  },
@@ -1912,6 +1928,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "p",
+// CHECK-NEXT:          "mangledName": "_ZZ27TestDependentAllocationExprvE1p",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "T *"
 // CHECK-NEXT:          },
@@ -2134,6 +2151,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "obj",
+// CHECK-NEXT:          "mangledName": "_ZZ28TestDependentScopeMemberExprvE3obj",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "DependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:          }
@@ -2640,6 +2658,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "obj",
+// CHECK-NEXT:          "mangledName": "_ZZ36TestDependentScopeTemplateMemberExprvE3obj",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "OtherDependentScopeMemberExprWrapper<T>"
 // CHECK-NEXT:          }
@@ -2793,6 +2812,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestUnionInitList",
+// CHECK-NEXT:  "mangledName": "_Z17TestUnionInitListv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -2853,6 +2873,7 @@
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "name": "us",
+// CHECK-NEXT:        "mangledName": "_ZZ17TestUnionInitListvE2us",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "U [3]"
 // CHECK-NEXT:        },
@@ -2990,6 +3011,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestSwitch",
+// CHECK-NEXT:  "mangledName": "_Z10TestSwitchi",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -3017,6 +3039,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "i",
+// CHECK-NEXT:    "mangledName": "_ZZ10TestSwitchiE1i",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -3095,6 +3118,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "a",
+// CHECK-NEXT:          "mangledName": "_ZZ10TestSwitchiE1a",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          }
@@ -3198,6 +3222,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestIf",
+// CHECK-NEXT:  "mangledName": "_Z6TestIfb",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (bool)"
 // CHECK-NEXT:  },
@@ -3225,6 +3250,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isReferenced": true,
 // CHECK-NEXT:    "name": "b",
+// CHECK-NEXT:    "mangledName": "_ZZ6TestIfbE1b",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "bool"
 // CHECK-NEXT:    }
@@ -3304,6 +3330,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "i",
+// CHECK-NEXT:          "mangledName": "_ZZ6TestIfbE1i",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "const int"
 // CHECK-NEXT:          },
@@ -3879,6 +3906,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestIteration",
+// CHECK-NEXT:  "mangledName": "_Z13TestIterationv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -3958,6 +3986,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "i",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE1i",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          },
@@ -4026,6 +4055,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "j",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE1j",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          },
@@ -4270,6 +4300,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "vals",
+// CHECK-NEXT:        "mangledName": "_ZZ13TestIterationvE4vals",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "int [10]"
 // CHECK-NEXT:        }
@@ -4335,6 +4366,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__range1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE8__range1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int (&)[10]"
 // CHECK-NEXT:          },
@@ -4411,6 +4443,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__begin1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE8__begin1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "desugaredQualType": "int *",
 // CHECK-NEXT:           "qualType": "int *"
@@ -4511,6 +4544,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__end1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE6__end1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "desugaredQualType": "int *",
 // CHECK-NEXT:           "qualType": "int *"
@@ -4839,6 +4873,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "v",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE1v",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          },
@@ -5008,6 +5043,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "C",
+// CHECK-NEXT:        "mangledName": "_ZZ13TestIterationvE1C",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "Container"
 // CHECK-NEXT:        },
@@ -5101,6 +5137,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__range1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE8__range1_0",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "Container &"
 // CHECK-NEXT:          },
@@ -5177,6 +5214,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__begin1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE8__begin1_0",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "desugaredQualType": "int *",
 // CHECK-NEXT:           "qualType": "int *"
@@ -5324,6 +5362,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__end1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE6__end1_0",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "desugaredQualType": "int *",
 // CHECK-NEXT:           "qualType": "int *"
@@ -5655,6 +5694,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "v",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE1v_0",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          },
@@ -5841,6 +5881,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "a",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE1a",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          }
@@ -5886,6 +5927,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__range1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE8__range1_1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int (&)[10]"
 // CHECK-NEXT:          },
@@ -5962,6 +6004,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__begin1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE8__begin1_1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "desugaredQualType": "int *",
 // CHECK-NEXT:           "qualType": "int *"
@@ -6062,6 +6105,7 @@
 // CHECK-NEXT:          "isImplicit": true,
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "__end1",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE6__end1_1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "desugaredQualType": "int *",
 // CHECK-NEXT:           "qualType": "int *"
@@ -6390,6 +6434,7 @@
 // CHECK-NEXT:           }
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "name": "v",
+// CHECK-NEXT:          "mangledName": "_ZZ13TestIterationvE1v_1",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          },
@@ -6626,6 +6671,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isReferenced": true,
 // CHECK-NEXT:      "name": "T",
+// CHECK-NEXT:      "mangledName": "_ZZ33TestDependentGenericSelectionExprT_E1T",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "Ty"
 // CHECK-NEXT:      }
Index: clang/test/AST/ast-dump-stmt-json.c
===================================================================
--- clang/test/AST/ast-dump-stmt-json.c
+++ clang/test/AST/ast-dump-stmt-json.c
@@ -172,6 +172,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestLocation",
+// CHECK-NEXT:  "mangledName": "TestLocation",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -222,6 +223,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestIndent",
+// CHECK-NEXT:  "mangledName": "TestIndent",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -372,6 +374,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "x",
+// CHECK-NEXT:      "mangledName": "x",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      },
@@ -440,6 +443,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "y",
+// CHECK-NEXT:      "mangledName": "y",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -465,6 +469,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "z",
+// CHECK-NEXT:      "mangledName": "z",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -495,6 +500,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestOpaqueValueExpr",
+// CHECK-NEXT:  "mangledName": "TestOpaqueValueExpr",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -709,6 +715,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isUsed": true,
 // CHECK-NEXT:      "name": "T1",
+// CHECK-NEXT:      "mangledName": "T1",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "char"
 // CHECK-NEXT:      },
@@ -801,6 +808,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isUsed": true,
 // CHECK-NEXT:      "name": "T2",
+// CHECK-NEXT:      "mangledName": "T2",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      },
@@ -1923,6 +1931,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "j",
+// CHECK-NEXT:      "mangledName": "j",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      },
@@ -2205,6 +2214,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isUsed": true,
 // CHECK-NEXT:      "name": "ptr",
+// CHECK-NEXT:      "mangledName": "ptr",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "void *"
 // CHECK-NEXT:      },
@@ -3863,6 +3873,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "i",
+// CHECK-NEXT:        "mangledName": "i",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "int"
 // CHECK-NEXT:        },
@@ -5156,6 +5167,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isUsed": true,
 // CHECK-NEXT:          "name": "a",
+// CHECK-NEXT:          "mangledName": "a",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          },
@@ -5300,6 +5312,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "a",
+// CHECK-NEXT:      "mangledName": "a",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -5345,6 +5358,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "b",
+// CHECK-NEXT:      "mangledName": "b",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
Index: clang/test/AST/ast-dump-records-json.cpp
===================================================================
--- clang/test/AST/ast-dump-records-json.cpp
+++ clang/test/AST/ast-dump-records-json.cpp
@@ -2572,6 +2572,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN5Base1aSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Base1 &(const Base1 &)"
 // CHECK-NEXT:    },
@@ -2627,6 +2628,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN5Base1aSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Base1 &(Base1 &&)"
 // CHECK-NEXT:    },
@@ -2682,6 +2684,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~Base1",
+// CHECK-NEXT:    "mangledName": "_ZN5Base1D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -2809,6 +2812,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN5Base2aSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Base2 &(const Base2 &)"
 // CHECK-NEXT:    },
@@ -2864,6 +2868,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN5Base2aSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Base2 &(Base2 &&)"
 // CHECK-NEXT:    },
@@ -2919,6 +2924,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~Base2",
+// CHECK-NEXT:    "mangledName": "_ZN5Base2D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3046,6 +3052,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN5Base3aSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Base3 &(const Base3 &)"
 // CHECK-NEXT:    },
@@ -3101,6 +3108,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN5Base3aSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Base3 &(Base3 &&)"
 // CHECK-NEXT:    },
@@ -3156,6 +3164,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~Base3",
+// CHECK-NEXT:    "mangledName": "_ZN5Base3D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3504,6 +3513,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived3aSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Derived3 &(const Derived3 &)"
 // CHECK-NEXT:    },
@@ -3558,6 +3568,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived3aSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Derived3 &(Derived3 &&)"
 // CHECK-NEXT:    },
@@ -3612,6 +3623,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~Derived3",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived3D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3753,6 +3765,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived4aSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Derived4 &(const Derived4 &)"
 // CHECK-NEXT:    },
@@ -3807,6 +3820,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived4aSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Derived4 &(Derived4 &&)"
 // CHECK-NEXT:    },
@@ -3861,6 +3875,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~Derived4",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived4D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3988,6 +4003,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived5aSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Derived5 &(const Derived5 &)"
 // CHECK-NEXT:    },
@@ -4042,6 +4058,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived5aSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "Derived5 &(Derived5 &&)"
 // CHECK-NEXT:    },
@@ -4096,6 +4113,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~Derived5",
+// CHECK-NEXT:    "mangledName": "_ZN8Derived5D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
Index: clang/test/AST/ast-dump-record-definition-data-json.cpp
===================================================================
--- clang/test/AST/ast-dump-record-definition-data-json.cpp
+++ clang/test/AST/ast-dump-record-definition-data-json.cpp
@@ -218,6 +218,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "operator()",
+// CHECK-NEXT:    "mangledName": "_ZZ1fvENK3$_0clEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void () const"
 // CHECK-NEXT:    },
@@ -264,6 +265,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator void (*)()",
+// CHECK-NEXT:    "mangledName": "_ZZ1fvENK3$_0cvPFvvEEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (*() const noexcept)()"
 // CHECK-NEXT:    },
@@ -292,6 +294,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "__invoke",
+// CHECK-NEXT:    "mangledName": "_ZZ1fvEN3$_08__invokeEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -321,6 +324,7 @@
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "isReferenced": true,
 // CHECK-NEXT:    "name": "~",
+// CHECK-NEXT:    "mangledName": "_ZZ1fvEN3$_0D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void () noexcept"
 // CHECK-NEXT:    },
@@ -678,6 +682,7 @@
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "isReferenced": true,
 // CHECK-NEXT:    "name": "~",
+// CHECK-NEXT:    "mangledName": "_ZZ1fvEN3$_1D1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void () noexcept"
 // CHECK-NEXT:    },
@@ -793,6 +798,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "CanPassInRegisters",
+// CHECK-NEXT:    "mangledName": "_ZN18CanPassInRegistersC1ERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (const CanPassInRegisters &)"
 // CHECK-NEXT:    },
@@ -933,6 +939,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "CantPassInRegisters",
+// CHECK-NEXT:    "mangledName": "_ZN19CantPassInRegistersC1ERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (const CantPassInRegisters &)"
 // CHECK-NEXT:    },
@@ -1585,6 +1592,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "f",
+// CHECK-NEXT:    "mangledName": "_ZN16IsStandardLayout1fEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    }
@@ -1705,6 +1713,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "f",
+// CHECK-NEXT:    "mangledName": "_ZN19IsNotStandardLayout1fEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -1733,6 +1742,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN19IsNotStandardLayoutaSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsNotStandardLayout &(const IsNotStandardLayout &)"
 // CHECK-NEXT:    },
@@ -1788,6 +1798,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN19IsNotStandardLayoutaSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsNotStandardLayout &(IsNotStandardLayout &&)"
 // CHECK-NEXT:    },
@@ -1843,6 +1854,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~IsNotStandardLayout",
+// CHECK-NEXT:    "mangledName": "_ZN19IsNotStandardLayoutD1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -2057,6 +2069,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "IsNotTriviallyCopyable",
+// CHECK-NEXT:    "mangledName": "_ZN22IsNotTriviallyCopyableC1ERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (const IsNotTriviallyCopyable &)"
 // CHECK-NEXT:    },
@@ -2473,6 +2486,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "IsTrivial",
+// CHECK-NEXT:    "mangledName": "_ZN9IsTrivialC1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -2600,6 +2614,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "IsNotTrivial",
+// CHECK-NEXT:    "mangledName": "_ZN12IsNotTrivialC1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -2738,6 +2753,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "f",
+// CHECK-NEXT:    "mangledName": "_ZN13IsPolymorphic1fEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -2766,6 +2782,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN13IsPolymorphicaSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsPolymorphic &(const IsPolymorphic &)"
 // CHECK-NEXT:    },
@@ -2821,6 +2838,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN13IsPolymorphicaSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsPolymorphic &(IsPolymorphic &&)"
 // CHECK-NEXT:    },
@@ -2876,6 +2894,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~IsPolymorphic",
+// CHECK-NEXT:    "mangledName": "_ZN13IsPolymorphicD1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3007,6 +3026,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "f",
+// CHECK-NEXT:    "mangledName": "_ZN16IsNotPolymorphic1fEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    }
@@ -3128,6 +3148,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "f",
+// CHECK-NEXT:    "mangledName": "_ZN10IsAbstract1fEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3157,6 +3178,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN10IsAbstractaSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsAbstract &(const IsAbstract &)"
 // CHECK-NEXT:    },
@@ -3212,6 +3234,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN10IsAbstractaSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsAbstract &(IsAbstract &&)"
 // CHECK-NEXT:    },
@@ -3267,6 +3290,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~IsAbstract",
+// CHECK-NEXT:    "mangledName": "_ZN10IsAbstractD1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3389,6 +3413,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "f",
+// CHECK-NEXT:    "mangledName": "_ZN13IsNotAbstract1fEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3417,6 +3442,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN13IsNotAbstractaSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsNotAbstract &(const IsNotAbstract &)"
 // CHECK-NEXT:    },
@@ -3472,6 +3498,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN13IsNotAbstractaSEOS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "IsNotAbstract &(IsNotAbstract &&)"
 // CHECK-NEXT:    },
@@ -3527,6 +3554,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "~IsNotAbstract",
+// CHECK-NEXT:    "mangledName": "_ZN13IsNotAbstractD1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3647,6 +3675,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "~IsLiteral",
+// CHECK-NEXT:    "mangledName": "_ZN9IsLiteralD1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -3761,6 +3790,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "~IsNotLiteral",
+// CHECK-NEXT:    "mangledName": "_ZN12IsNotLiteralD1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void () noexcept"
 // CHECK-NEXT:    },
@@ -3904,6 +3934,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "HasUserDeclaredConstructor",
+// CHECK-NEXT:    "mangledName": "_ZN26HasUserDeclaredConstructorC1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -4153,6 +4184,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "HasConstexprNonCopyMoveConstructor",
+// CHECK-NEXT:    "mangledName": "_ZN34HasConstexprNonCopyMoveConstructorC1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -4297,6 +4329,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "HasNoConstexprNonCopyMoveConstructor",
+// CHECK-NEXT:    "mangledName": "_ZN36HasNoConstexprNonCopyMoveConstructorC1Ev",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -4469,6 +4502,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "HasMutableFields",
+// CHECK-NEXT:    "mangledName": "_ZN16HasMutableFieldsC1ERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (const HasMutableFields &)"
 // CHECK-NEXT:    },
@@ -4524,6 +4558,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "operator=",
+// CHECK-NEXT:    "mangledName": "_ZN16HasMutableFieldsaSERKS_",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "HasMutableFields &(const HasMutableFields &)"
 // CHECK-NEXT:    },
Index: clang/test/AST/ast-dump-macro-json.c
===================================================================
--- clang/test/AST/ast-dump-macro-json.c
+++ clang/test/AST/ast-dump-macro-json.c
@@ -49,6 +49,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "frobble",
+// CHECK-NEXT:  "mangledName": "frobble",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void)"
 // CHECK-NEXT:  }
@@ -84,6 +85,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "previousDecl": "0x{{.*}}",
 // CHECK-NEXT:  "name": "frobble",
+// CHECK-NEXT:  "mangledName": "frobble",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void)"
 // CHECK-NEXT:  }
@@ -118,6 +120,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "quux",
+// CHECK-NEXT:  "mangledName": "quux",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void)"
 // CHECK-NEXT:  }
@@ -154,6 +157,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "foo0",
+// CHECK-NEXT:  "mangledName": "foo0",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void)"
 // CHECK-NEXT:  }
@@ -190,6 +194,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "foo1",
+// CHECK-NEXT:  "mangledName": "foo1",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void)"
 // CHECK-NEXT:  }
Index: clang/test/AST/ast-dump-if-json.cpp
===================================================================
--- clang/test/AST/ast-dump-if-json.cpp
+++ clang/test/AST/ast-dump-if-json.cpp
@@ -698,6 +698,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isUsed": true,
 // CHECK-NEXT:      "name": "i",
+// CHECK-NEXT:      "mangledName": "_ZZ4funciE1i",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      },
@@ -879,6 +880,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isUsed": true,
 // CHECK-NEXT:      "name": "i",
+// CHECK-NEXT:      "mangledName": "_ZZ4funciE1i_0",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      },
Index: clang/test/AST/ast-dump-funcs-json.cpp
===================================================================
--- clang/test/AST/ast-dump-funcs-json.cpp
+++ clang/test/AST/ast-dump-funcs-json.cpp
@@ -65,6 +65,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test1",
+// CHECK-NEXT:  "mangledName": "_ZN1S5Test1Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  }
@@ -92,6 +93,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test2",
+// CHECK-NEXT:  "mangledName": "_ZNK1S5Test2Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () const"
 // CHECK-NEXT:  }
@@ -119,6 +121,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test3",
+// CHECK-NEXT:  "mangledName": "_ZNV1S5Test3Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () volatile"
 // CHECK-NEXT:  }
@@ -146,6 +149,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test4",
+// CHECK-NEXT:  "mangledName": "_ZNR1S5Test4Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () &"
 // CHECK-NEXT:  }
@@ -173,6 +177,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test5",
+// CHECK-NEXT:  "mangledName": "_ZNO1S5Test5Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () &&"
 // CHECK-NEXT:  }
@@ -200,6 +205,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test6",
+// CHECK-NEXT:  "mangledName": "_ZN1S5Test6Efi",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (float, int)"
 // CHECK-NEXT:  },
@@ -302,6 +308,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test7",
+// CHECK-NEXT:  "mangledName": "_ZN1S5Test7Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -331,6 +338,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test6",
+// CHECK-NEXT:  "mangledName": "_ZN1T5Test6Efi",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (float, int)"
 // CHECK-NEXT:  },
@@ -448,6 +456,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test1",
+// CHECK-NEXT:  "mangledName": "_ZN1U5Test1Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  }
@@ -477,6 +486,7 @@
 // CHECK-NEXT:  "parentDeclContextId": "0x{{.*}}",
 // CHECK-NEXT:  "previousDecl": "0x{{.*}}",
 // CHECK-NEXT:  "name": "Test1",
+// CHECK-NEXT:  "mangledName": "_ZN1U5Test1Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -523,6 +533,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "Test1",
+// CHECK-NEXT:  "mangledName": "_Z5Test1v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  }
@@ -550,6 +561,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test2",
+// CHECK-NEXT:  "mangledName": "_Z5Test2v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  }
@@ -577,6 +589,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test3",
+// CHECK-NEXT:  "mangledName": "_Z5Test3ii",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int, int)"
 // CHECK-NEXT:  },
@@ -602,6 +615,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "_ZZ5Test3iiE1a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -627,6 +641,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "b",
+// CHECK-NEXT:    "mangledName": "_ZZ5Test3iiE1b",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -656,6 +671,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test4",
+// CHECK-NEXT:  "mangledName": "_Z5Test4ii",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int, int)"
 // CHECK-NEXT:  },
@@ -681,6 +697,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "_ZZ5Test4iiE1a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -706,6 +723,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "b",
+// CHECK-NEXT:    "mangledName": "_ZZ5Test4iiE1b",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    },
@@ -759,6 +777,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test5",
+// CHECK-NEXT:  "mangledName": "_Z5Test5v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -787,6 +806,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test6",
+// CHECK-NEXT:  "mangledName": "_ZL5Test6v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -815,6 +835,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test7",
+// CHECK-NEXT:  "mangledName": "_Z5Test7v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -843,6 +864,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test8",
+// CHECK-NEXT:  "mangledName": "_Z5Test8v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -871,6 +893,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test9",
+// CHECK-NEXT:  "mangledName": "_Z5Test9v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () noexcept"
 // CHECK-NEXT:  }
@@ -898,6 +921,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test10",
+// CHECK-NEXT:  "mangledName": "_Z6Test10v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () noexcept(false)"
 // CHECK-NEXT:  }
@@ -925,6 +949,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test11",
+// CHECK-NEXT:  "mangledName": "_Z6Test11v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void () noexcept(1)"
 // CHECK-NEXT:  }
@@ -1059,6 +1084,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test13",
+// CHECK-NEXT:  "mangledName": "_Z6Test13i",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -1128,6 +1154,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test14",
+// CHECK-NEXT:  "mangledName": "_Z6Test14iz",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int, ...)"
 // CHECK-NEXT:  },
Index: clang/test/AST/ast-dump-expr-json.m
===================================================================
--- clang/test/AST/ast-dump-expr-json.m
+++ clang/test/AST/ast-dump-expr-json.m
@@ -120,6 +120,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCEncode",
+// CHECK-NEXT:  "mangledName": "TestObjCEncode",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -265,6 +266,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCMessage",
+// CHECK-NEXT:  "mangledName": "TestObjCMessage",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (I *)"
 // CHECK-NEXT:  },
@@ -292,6 +294,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "Obj",
+// CHECK-NEXT:    "mangledName": "Obj",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "I *"
 // CHECK-NEXT:    }
@@ -443,6 +446,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCBoxed",
+// CHECK-NEXT:  "mangledName": "TestObjCBoxed",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -604,6 +608,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCSelector",
+// CHECK-NEXT:  "mangledName": "TestObjCSelector",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -664,6 +669,7 @@
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "name": "s",
+// CHECK-NEXT:        "mangledName": "s",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "desugaredQualType": "SEL *",
 // CHECK-NEXT:         "qualType": "SEL",
@@ -726,6 +732,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCProtocol",
+// CHECK-NEXT:  "mangledName": "TestObjCProtocol",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (id)"
 // CHECK-NEXT:  },
@@ -753,6 +760,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "Obj",
+// CHECK-NEXT:    "mangledName": "Obj",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "desugaredQualType": "id",
 // CHECK-NEXT:     "qualType": "id",
@@ -911,6 +919,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCPropertyRef",
+// CHECK-NEXT:  "mangledName": "TestObjCPropertyRef",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (J *)"
 // CHECK-NEXT:  },
@@ -938,6 +947,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "Obj",
+// CHECK-NEXT:    "mangledName": "Obj",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "J *"
 // CHECK-NEXT:    }
@@ -1577,6 +1587,7 @@
 // CHECK-NEXT:         }
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "name": "i",
+// CHECK-NEXT:        "mangledName": "i",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "int"
 // CHECK-NEXT:        },
@@ -1931,6 +1942,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCSubscriptRef",
+// CHECK-NEXT:  "mangledName": "TestObjCSubscriptRef",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (NSMutableArray *, NSMutableDictionary *)"
 // CHECK-NEXT:  },
@@ -1958,6 +1970,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "Array",
+// CHECK-NEXT:    "mangledName": "Array",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "NSMutableArray *"
 // CHECK-NEXT:    }
@@ -1984,6 +1997,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "Dict",
+// CHECK-NEXT:    "mangledName": "Dict",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "NSMutableDictionary *"
 // CHECK-NEXT:    }
@@ -2849,6 +2863,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "i",
+// CHECK-NEXT:        "mangledName": "i",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "desugaredQualType": "id",
 // CHECK-NEXT:         "qualType": "id",
@@ -4775,6 +4790,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCIVarRef",
+// CHECK-NEXT:  "mangledName": "TestObjCIVarRef",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (I *)"
 // CHECK-NEXT:  },
@@ -4802,6 +4818,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "Ptr",
+// CHECK-NEXT:    "mangledName": "Ptr",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "I *"
 // CHECK-NEXT:    }
@@ -4978,6 +4995,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCBoolLiteral",
+// CHECK-NEXT:  "mangledName": "TestObjCBoolLiteral",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
Index: clang/test/AST/ast-dump-expr-json.cpp
===================================================================
--- clang/test/AST/ast-dump-expr-json.cpp
+++ clang/test/AST/ast-dump-expr-json.cpp
@@ -178,6 +178,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestThrow",
+// CHECK-NEXT:  "mangledName": "_Z9TestThrowv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -293,6 +294,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestPointerToMember",
+// CHECK-NEXT:  "mangledName": "_Z19TestPointerToMember1SPS_MS_iMS_FviE",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (S, S *, int S::*, void (S::*)(int))"
 // CHECK-NEXT:  },
@@ -320,6 +322,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "obj1",
+// CHECK-NEXT:    "mangledName": "_ZZ19TestPointerToMember1SPS_MS_iMS_FviEE4obj1",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "S"
 // CHECK-NEXT:    }
@@ -346,6 +349,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "obj2",
+// CHECK-NEXT:    "mangledName": "_ZZ19TestPointerToMember1SPS_MS_iMS_FviEE4obj2",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "S *"
 // CHECK-NEXT:    }
@@ -372,6 +376,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "data",
+// CHECK-NEXT:    "mangledName": "_ZZ19TestPointerToMember1SPS_MS_iMS_FviEE4data",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int S::*"
 // CHECK-NEXT:    }
@@ -398,6 +403,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "call",
+// CHECK-NEXT:    "mangledName": "_ZZ19TestPointerToMember1SPS_MS_iMS_FviEE4call",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void (S::*)(int)"
 // CHECK-NEXT:    }
@@ -1035,6 +1041,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestCasting",
+// CHECK-NEXT:  "mangledName": "_Z11TestCastingPK1S",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (const S *)"
 // CHECK-NEXT:  },
@@ -1062,6 +1069,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "s",
+// CHECK-NEXT:    "mangledName": "_ZZ11TestCastingPK1SE1s",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "const S *"
 // CHECK-NEXT:    }
@@ -1500,6 +1508,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isReferenced": true,
 // CHECK-NEXT:      "name": "p",
+// CHECK-NEXT:      "mangledName": "_ZZ20TestUnaryExpressionsPiE1p",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int *"
 // CHECK-NEXT:      }
@@ -2497,6 +2506,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestPostfixExpressions",
+// CHECK-NEXT:  "mangledName": "_Z22TestPostfixExpressions1SPS_P1UIiE",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (S, S *, U<int> *)"
 // CHECK-NEXT:  },
@@ -2524,6 +2534,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "_ZZ22TestPostfixExpressions1SPS_P1UIiEE1a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "S"
 // CHECK-NEXT:    }
@@ -2550,6 +2561,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "p",
+// CHECK-NEXT:    "mangledName": "_ZZ22TestPostfixExpressions1SPS_P1UIiEE1p",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "S *"
 // CHECK-NEXT:    }
@@ -2576,6 +2588,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "r",
+// CHECK-NEXT:    "mangledName": "_ZZ22TestPostfixExpressions1SPS_P1UIiEE1r",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "U<int> *"
 // CHECK-NEXT:    }
@@ -3650,6 +3663,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isReferenced": true,
 // CHECK-NEXT:      "name": "a",
+// CHECK-NEXT:      "mangledName": "_ZZ22TestPrimaryExpressionsDpT_E1a",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "Ts..."
 // CHECK-NEXT:      },
@@ -4348,6 +4362,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "b",
+// CHECK-NEXT:          "mangledName": "_ZZ22TestPrimaryExpressionsDpT_E1b",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          }
@@ -4374,6 +4389,7 @@
 // CHECK-NEXT:          },
 // CHECK-NEXT:          "isReferenced": true,
 // CHECK-NEXT:          "name": "c",
+// CHECK-NEXT:          "mangledName": "_ZZ22TestPrimaryExpressionsDpT_E1c",
 // CHECK-NEXT:          "type": {
 // CHECK-NEXT:           "qualType": "int"
 // CHECK-NEXT:          }
@@ -4712,6 +4728,7 @@
 // CHECK-NEXT:               }
 // CHECK-NEXT:              },
 // CHECK-NEXT:              "name": "a",
+// CHECK-NEXT:              "mangledName": "_ZZZ22TestPrimaryExpressionsDpT_ENKUlizE_clEizE1a",
 // CHECK-NEXT:              "type": {
 // CHECK-NEXT:               "qualType": "int"
 // CHECK-NEXT:              }
@@ -4812,6 +4829,7 @@
 // CHECK-NEXT:               }
 // CHECK-NEXT:              },
 // CHECK-NEXT:              "name": "a",
+// CHECK-NEXT:              "mangledName": "_ZZZ22TestPrimaryExpressionsDpT_ENUlizE_8__invokeEizE1a",
 // CHECK-NEXT:              "type": {
 // CHECK-NEXT:               "qualType": "int"
 // CHECK-NEXT:              }
@@ -7760,6 +7778,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestADLCall",
+// CHECK-NEXT:  "mangledName": "_Z11TestADLCallv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -7821,6 +7840,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "x",
+// CHECK-NEXT:        "mangledName": "_ZZ11TestADLCallvE1x",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "desugaredQualType": "NS::X",
 // CHECK-NEXT:         "qualType": "NS::X"
@@ -8198,6 +8218,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestNonADLCall",
+// CHECK-NEXT:  "mangledName": "_Z14TestNonADLCallv",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -8259,6 +8280,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "x",
+// CHECK-NEXT:        "mangledName": "_ZZ14TestNonADLCallvE1x",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "desugaredQualType": "NS::X",
 // CHECK-NEXT:         "qualType": "NS::X"
@@ -8478,6 +8500,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestNonADLCall2",
+// CHECK-NEXT:  "mangledName": "_Z15TestNonADLCall2v",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -8539,6 +8562,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "x",
+// CHECK-NEXT:        "mangledName": "_ZZ15TestNonADLCall2vE1x",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "desugaredQualType": "NS::X",
 // CHECK-NEXT:         "qualType": "NS::X"
@@ -8961,6 +8985,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestNonADLCall3",
+// CHECK-NEXT:  "mangledName": "_ZN19test_adl_call_three15TestNonADLCall3Ev",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  },
@@ -9022,6 +9047,7 @@
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "isUsed": true,
 // CHECK-NEXT:        "name": "x",
+// CHECK-NEXT:        "mangledName": "_ZZN19test_adl_call_three15TestNonADLCall3EvE1x",
 // CHECK-NEXT:        "type": {
 // CHECK-NEXT:         "qualType": "NS::X"
 // CHECK-NEXT:        },
Index: clang/test/AST/ast-dump-expr-json.c
===================================================================
--- clang/test/AST/ast-dump-expr-json.c
+++ clang/test/AST/ast-dump-expr-json.c
@@ -132,6 +132,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Comma",
+// CHECK-NEXT:  "mangledName": "Comma",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (void)"
 // CHECK-NEXT:  },
@@ -291,6 +292,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Assignment",
+// CHECK-NEXT:  "mangledName": "Assignment",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -318,6 +320,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -548,6 +551,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Conditionals",
+// CHECK-NEXT:  "mangledName": "Conditionals",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -575,6 +579,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -980,6 +985,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "BinaryOperators",
+// CHECK-NEXT:  "mangledName": "BinaryOperators",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int, int)"
 // CHECK-NEXT:  },
@@ -1007,6 +1013,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -1033,6 +1040,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "b",
+// CHECK-NEXT:    "mangledName": "b",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -3350,6 +3358,7 @@
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "isUsed": true,
 // CHECK-NEXT:  "name": "UnaryOperators",
+// CHECK-NEXT:  "mangledName": "UnaryOperators",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int, int *)"
 // CHECK-NEXT:  },
@@ -3377,6 +3386,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -3403,6 +3413,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "b",
+// CHECK-NEXT:    "mangledName": "b",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int *"
 // CHECK-NEXT:    }
@@ -4014,6 +4025,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "PostfixOperators",
+// CHECK-NEXT:  "mangledName": "PostfixOperators",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int *, struct S, struct S *)"
 // CHECK-NEXT:  },
@@ -4041,6 +4053,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int *"
 // CHECK-NEXT:    }
@@ -4067,6 +4080,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "b",
+// CHECK-NEXT:    "mangledName": "b",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "desugaredQualType": "struct S",
 // CHECK-NEXT:     "qualType": "struct S"
@@ -4094,6 +4108,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "c",
+// CHECK-NEXT:    "mangledName": "c",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "struct S *"
 // CHECK-NEXT:    }
@@ -4907,6 +4922,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "PrimaryExpressions",
+// CHECK-NEXT:  "mangledName": "PrimaryExpressions",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -4934,6 +4950,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "a",
+// CHECK-NEXT:    "mangledName": "a",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
Index: clang/test/AST/ast-dump-decl-json.m
===================================================================
--- clang/test/AST/ast-dump-decl-json.m
+++ clang/test/AST/ast-dump-decl-json.m
@@ -108,6 +108,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCIvarDecl",
+// CHECK-NEXT:  "mangledName": "OBJC_CLASS_$_TestObjCIvarDecl",
 // CHECK-NEXT:  "super": {
 // CHECK-NEXT:   "id": "0x{{.*}}",
 // CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
@@ -312,6 +313,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCMethodDecl:",
+// CHECK-NEXT:  "mangledName": "-[testObjCMethodDecl TestObjCMethodDecl:]",
 // CHECK-NEXT:  "returnType": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -339,6 +341,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "i",
+// CHECK-NEXT:    "mangledName": "i",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -369,6 +372,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCMethodDecl:",
+// CHECK-NEXT:  "mangledName": "-[testObjCMethodDecl TestObjCMethodDecl:]",
 // CHECK-NEXT:  "returnType": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -385,6 +389,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "self",
+// CHECK-NEXT:    "mangledName": "self",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "testObjCMethodDecl *"
 // CHECK-NEXT:    }
@@ -399,6 +404,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "_cmd",
+// CHECK-NEXT:    "mangledName": "_cmd",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "desugaredQualType": "SEL *",
 // CHECK-NEXT:     "qualType": "SEL",
@@ -427,6 +433,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "i",
+// CHECK-NEXT:    "mangledName": "i",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -539,6 +546,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "foo",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProtocolDecl foo]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -570,6 +578,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCClass",
+// CHECK-NEXT:  "mangledName": "OBJC_CLASS_$_TestObjCClass",
 // CHECK-NEXT:  "super": {
 // CHECK-NEXT:   "id": "0x{{.*}}",
 // CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
@@ -610,6 +619,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "foo",
+// CHECK-NEXT:    "mangledName": "-[TestObjCClass foo]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -702,6 +712,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "foo",
+// CHECK-NEXT:    "mangledName": "-[TestObjCClass foo]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -717,6 +728,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isImplicit": true,
 // CHECK-NEXT:      "name": "self",
+// CHECK-NEXT:      "mangledName": "self",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "TestObjCClass *"
 // CHECK-NEXT:      }
@@ -731,6 +743,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isImplicit": true,
 // CHECK-NEXT:      "name": "_cmd",
+// CHECK-NEXT:      "mangledName": "_cmd",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "desugaredQualType": "SEL *",
 // CHECK-NEXT:       "qualType": "SEL",
@@ -823,6 +836,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "bar",
+// CHECK-NEXT:    "mangledName": "-[TestObjCCategoryDecl bar]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -854,6 +868,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestGenericInterface",
+// CHECK-NEXT:  "mangledName": "OBJC_CLASS_$_TestGenericInterface",
 // CHECK-NEXT:  "super": {
 // CHECK-NEXT:   "id": "0x{{.*}}",
 // CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
@@ -958,6 +973,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "bar",
+// CHECK-NEXT:    "mangledName": "-[TestObjCClass(TestObjCCategoryDecl) bar]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -973,6 +989,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isImplicit": true,
 // CHECK-NEXT:      "name": "self",
+// CHECK-NEXT:      "mangledName": "self",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "TestObjCClass *"
 // CHECK-NEXT:      }
@@ -987,6 +1004,7 @@
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "isImplicit": true,
 // CHECK-NEXT:      "name": "_cmd",
+// CHECK-NEXT:      "mangledName": "_cmd",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "desugaredQualType": "SEL *",
 // CHECK-NEXT:       "qualType": "SEL",
@@ -1068,6 +1086,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestObjCProperty",
+// CHECK-NEXT:  "mangledName": "OBJC_CLASS_$_TestObjCProperty",
 // CHECK-NEXT:  "super": {
 // CHECK-NEXT:   "id": "0x{{.*}}",
 // CHECK-NEXT:   "kind": "ObjCInterfaceDecl",
@@ -1172,6 +1191,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "getterFoo",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty getterFoo]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    },
@@ -1199,6 +1219,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "setterFoo:",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setterFoo:]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -1225,6 +1246,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "foo",
+// CHECK-NEXT:      "mangledName": "foo",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -1254,6 +1276,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "bar",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty bar]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    },
@@ -1281,6 +1304,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "setBar:",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setBar:]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -1307,6 +1331,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "bar",
+// CHECK-NEXT:      "mangledName": "bar",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -1499,6 +1524,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "getterFoo",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty getterFoo]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    },
@@ -1526,6 +1552,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "setterFoo:",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setterFoo:]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -1553,6 +1580,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "foo",
+// CHECK-NEXT:      "mangledName": "foo",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -1582,6 +1610,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "bar",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty bar]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    },
@@ -1609,6 +1638,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isImplicit": true,
 // CHECK-NEXT:    "name": "setBar:",
+// CHECK-NEXT:    "mangledName": "-[TestObjCProperty setBar:]",
 // CHECK-NEXT:    "returnType": {
 // CHECK-NEXT:     "qualType": "void"
 // CHECK-NEXT:    },
@@ -1636,6 +1666,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "bar",
+// CHECK-NEXT:      "mangledName": "bar",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "int"
 // CHECK-NEXT:      }
@@ -1668,6 +1699,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestBlockDecl",
+// CHECK-NEXT:  "mangledName": "TestBlockDecl",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void (int)"
 // CHECK-NEXT:  },
@@ -1695,6 +1727,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "x",
+// CHECK-NEXT:    "mangledName": "x",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -1807,6 +1840,7 @@
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "name": "y",
+// CHECK-NEXT:            "mangledName": "y",
 // CHECK-NEXT:            "type": {
 // CHECK-NEXT:             "qualType": "int"
 // CHECK-NEXT:            }
@@ -1912,6 +1946,7 @@
 // CHECK-NEXT:             }
 // CHECK-NEXT:            },
 // CHECK-NEXT:            "name": "y",
+// CHECK-NEXT:            "mangledName": "y",
 // CHECK-NEXT:            "type": {
 // CHECK-NEXT:             "qualType": "int"
 // CHECK-NEXT:            }
@@ -1949,6 +1984,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "Test",
+// CHECK-NEXT:  "mangledName": "Test",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "desugaredQualType": "int",
 // CHECK-NEXT:   "qualType": "typeof (B.foo)"
Index: clang/test/AST/ast-dump-decl-json.c
===================================================================
--- clang/test/AST/ast-dump-decl-json.c
+++ clang/test/AST/ast-dump-decl-json.c
@@ -159,6 +159,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestLocation",
+// CHECK-NEXT:  "mangledName": "TestLocation",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  }
@@ -186,6 +187,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestLocationFromInclude",
+// CHECK-NEXT:  "mangledName": "TestLocationFromInclude",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "desugaredQualType": "int",
 // CHECK-NEXT:   "qualType": "TestTypedefFromInclude",
@@ -1128,6 +1130,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunctionDecl",
+// CHECK-NEXT:  "mangledName": "TestFunctionDecl",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int (int, enum (anonymous enum at {{.*}}:69:29))"
 // CHECK-NEXT:  },
@@ -1155,6 +1158,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "x",
+// CHECK-NEXT:    "mangledName": "x",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -1180,6 +1184,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "y",
+// CHECK-NEXT:    "mangledName": "y",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "desugaredQualType": "enum (anonymous at {{.*}}:69:29)",
 // CHECK-NEXT:     "qualType": "enum (anonymous enum at {{.*}}:69:29)"
@@ -1299,6 +1304,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunctionDecl2",
+// CHECK-NEXT:  "mangledName": "TestFunctionDecl2",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int (enum Enum)"
 // CHECK-NEXT:  },
@@ -1325,6 +1331,7 @@
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "isUsed": true,
 // CHECK-NEXT:    "name": "x",
+// CHECK-NEXT:    "mangledName": "x",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "desugaredQualType": "enum Enum",
 // CHECK-NEXT:     "qualType": "enum Enum"
@@ -1468,6 +1475,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunctionDeclProto",
+// CHECK-NEXT:  "mangledName": "TestFunctionDeclProto",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int (int)"
 // CHECK-NEXT:  },
@@ -1493,6 +1501,7 @@
 // CHECK-NEXT:     }
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "name": "x",
+// CHECK-NEXT:    "mangledName": "x",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "int"
 // CHECK-NEXT:    }
@@ -1522,6 +1531,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunctionDeclNoProto",
+// CHECK-NEXT:  "mangledName": "TestFunctionDeclNoProto",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "void ()"
 // CHECK-NEXT:  }
@@ -1549,6 +1559,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunctionDeclSC",
+// CHECK-NEXT:  "mangledName": "TestFunctionDeclSC",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int ()"
 // CHECK-NEXT:  },
@@ -1577,6 +1588,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestFunctionDeclInline",
+// CHECK-NEXT:  "mangledName": "TestFunctionDeclInline",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int ()"
 // CHECK-NEXT:  },
@@ -1705,6 +1717,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestVarDecl",
+// CHECK-NEXT:  "mangledName": "TestVarDecl",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  }
@@ -1732,6 +1745,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestVarDeclSC",
+// CHECK-NEXT:  "mangledName": "TestVarDeclSC",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -1760,6 +1774,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestVarDeclThread",
+// CHECK-NEXT:  "mangledName": "TestVarDeclThread",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -1788,6 +1803,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestVarDeclInit",
+// CHECK-NEXT:  "mangledName": "TestVarDeclInit",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  },
@@ -1839,6 +1855,7 @@
 // CHECK-NEXT:   }
 // CHECK-NEXT:  },
 // CHECK-NEXT:  "name": "TestParmVarDecl",
+// CHECK-NEXT:  "mangledName": "TestParmVarDecl",
 // CHECK-NEXT:  "type": {
 // CHECK-NEXT:   "qualType": "int"
 // CHECK-NEXT:  }
Index: clang/test/AST/ast-dump-decl-context-json.cpp
===================================================================
--- clang/test/AST/ast-dump-decl-context-json.cpp
+++ clang/test/AST/ast-dump-decl-context-json.cpp
@@ -86,6 +86,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "Function",
+// CHECK-NEXT:      "mangledName": "_ZN4Test2NS8FunctionEv",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "void ()"
 // CHECK-NEXT:      }
@@ -116,6 +117,7 @@
 // CHECK-NEXT:    "parentDeclContextId": "0x{{.*}}",
 // CHECK-NEXT:    "previousDecl": "0x{{.*}}",
 // CHECK-NEXT:    "name": "Function",
+// CHECK-NEXT:    "mangledName": "_ZN4Test2NS8FunctionEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
@@ -261,6 +263,7 @@
 // CHECK-NEXT:       }
 // CHECK-NEXT:      },
 // CHECK-NEXT:      "name": "Method",
+// CHECK-NEXT:      "mangledName": "_ZN4Test1S6MethodEv",
 // CHECK-NEXT:      "type": {
 // CHECK-NEXT:       "qualType": "void ()"
 // CHECK-NEXT:      }
@@ -291,6 +294,7 @@
 // CHECK-NEXT:    "parentDeclContextId": "0x{{.*}}",
 // CHECK-NEXT:    "previousDecl": "0x{{.*}}",
 // CHECK-NEXT:    "name": "Method",
+// CHECK-NEXT:    "mangledName": "_ZN4Test1S6MethodEv",
 // CHECK-NEXT:    "type": {
 // CHECK-NEXT:     "qualType": "void ()"
 // CHECK-NEXT:    },
Index: clang/lib/AST/JSONNodeDumper.cpp
===================================================================
--- clang/lib/AST/JSONNodeDumper.cpp
+++ clang/lib/AST/JSONNodeDumper.cpp
@@ -688,8 +688,12 @@
 }
 
 void JSONNodeDumper::VisitNamedDecl(const NamedDecl *ND) {
-  if (ND && ND->getDeclName())
+  if (ND && ND->getDeclName()) {
     JOS.attribute("name", ND->getNameAsString());
+    std::string MangledName = ASTNameGen.getName(ND);
+    if (!MangledName.empty())
+      JOS.attribute("mangledName", MangledName);
+  }
 }
 
 void JSONNodeDumper::VisitTypedefDecl(const TypedefDecl *TD) {
Index: clang/include/clang/AST/JSONNodeDumper.h
===================================================================
--- clang/include/clang/AST/JSONNodeDumper.h
+++ clang/include/clang/AST/JSONNodeDumper.h
@@ -16,12 +16,13 @@
 #define LLVM_CLANG_AST_JSONNODEDUMPER_H
 
 #include "clang/AST/ASTContext.h"
-#include "clang/AST/ASTNodeTraverser.h"
 #include "clang/AST/ASTDumperUtils.h"
+#include "clang/AST/ASTNodeTraverser.h"
 #include "clang/AST/AttrVisitor.h"
 #include "clang/AST/CommentCommandTraits.h"
 #include "clang/AST/CommentVisitor.h"
 #include "clang/AST/ExprCXX.h"
+#include "clang/AST/Mangle.h"
 #include "llvm/Support/JSON.h"
 
 namespace clang {
@@ -122,6 +123,7 @@
 
   const SourceManager &SM;
   ASTContext& Ctx;
+  ASTNameGenerator ASTNameGen;
   PrintingPolicy PrintPolicy;
   const comments::CommandTraits *Traits;
   StringRef LastLocFilename;
@@ -182,8 +184,9 @@
   JSONNodeDumper(raw_ostream &OS, const SourceManager &SrcMgr, ASTContext &Ctx,
                  const PrintingPolicy &PrintPolicy,
                  const comments::CommandTraits *Traits)
-      : NodeStreamer(OS), SM(SrcMgr), Ctx(Ctx), PrintPolicy(PrintPolicy),
-        Traits(Traits), LastLocLine(0), LastLocPresumedLine(0) {}
+      : NodeStreamer(OS), SM(SrcMgr), Ctx(Ctx), ASTNameGen(Ctx),
+        PrintPolicy(PrintPolicy), Traits(Traits), LastLocLine(0),
+        LastLocPresumedLine(0) {}
 
   void Visit(const Attr *A);
   void Visit(const Stmt *Node);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to