r370401 - Avoid crash when dumping NULL Type as JSON.
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 29 13:00:41 PDT 2019
Author: aaronballman
Date: Thu Aug 29 13:00:40 2019
New Revision: 370401
URL: http://llvm.org/viewvc/llvm-project?rev=370401&view=rev
Log:
Avoid crash when dumping NULL Type as JSON.
Patch by Bert Belder.
Modified:
cfe/trunk/lib/AST/JSONNodeDumper.cpp
cfe/trunk/test/AST/ast-dump-types-json.cpp
cfe/trunk/test/AST/gen_ast_dump_json_test.py
Modified: cfe/trunk/lib/AST/JSONNodeDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/JSONNodeDumper.cpp?rev=370401&r1=370400&r2=370401&view=diff
==============================================================================
--- cfe/trunk/lib/AST/JSONNodeDumper.cpp (original)
+++ cfe/trunk/lib/AST/JSONNodeDumper.cpp Thu Aug 29 13:00:40 2019
@@ -66,6 +66,10 @@ void JSONNodeDumper::Visit(const Stmt *S
void JSONNodeDumper::Visit(const Type *T) {
JOS.attribute("id", createPointerRepresentation(T));
+
+ if (!T)
+ return;
+
JOS.attribute("kind", (llvm::Twine(T->getTypeClassName()) + "Type").str());
JOS.attribute("type", createQualType(QualType(T, 0), /*Desugar*/ false));
attributeOnlyIfTrue("isDependent", T->isDependentType());
Modified: cfe/trunk/test/AST/ast-dump-types-json.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/AST/ast-dump-types-json.cpp?rev=370401&r1=370400&r2=370401&view=diff
==============================================================================
--- cfe/trunk/test/AST/ast-dump-types-json.cpp (original)
+++ cfe/trunk/test/AST/ast-dump-types-json.cpp Thu Aug 29 13:00:40 2019
@@ -20,6 +20,11 @@ typedef int T::*TestMemberDataPointerTyp
typedef int TestQualTypePrinting(const char* c);
+typedef int TestUsingShadowDeclType;
+namespace TestNamespaceWithUsingShadowType {
+using ::TestUsingShadowDeclType;
+}
+
// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
@@ -420,5 +425,77 @@ typedef int TestQualTypePrinting(const c
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
+// CHECK-NEXT: ]
+// CHECK-NEXT: }
+
+// CHECK: "kind": "NamespaceDecl",
+// CHECK-NEXT: "loc": {
+// CHECK-NEXT: "file": "{{.*}}",
+// CHECK-NEXT: "line": 24,
+// CHECK-NEXT: "col": 11,
+// CHECK-NEXT: "tokLen": 32
+// CHECK-NEXT: },
+// CHECK-NEXT: "range": {
+// CHECK-NEXT: "begin": {
+// CHECK-NEXT: "col": 1,
+// CHECK-NEXT: "tokLen": 9
+// CHECK-NEXT: },
+// CHECK-NEXT: "end": {
+// CHECK-NEXT: "line": 26,
+// CHECK-NEXT: "col": 1,
+// CHECK-NEXT: "tokLen": 1
+// CHECK-NEXT: }
+// CHECK-NEXT: },
+// CHECK-NEXT: "name": "TestNamespaceWithUsingShadowType",
+// CHECK-NEXT: "inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT: "id": "0x{{.*}}",
+// CHECK-NEXT: "kind": "UsingDecl",
+// CHECK-NEXT: "loc": {
+// CHECK-NEXT: "line": 25,
+// CHECK-NEXT: "col": 9,
+// CHECK-NEXT: "tokLen": 23
+// CHECK-NEXT: },
+// CHECK-NEXT: "range": {
+// CHECK-NEXT: "begin": {
+// CHECK-NEXT: "col": 1,
+// CHECK-NEXT: "tokLen": 5
+// CHECK-NEXT: },
+// CHECK-NEXT: "end": {
+// CHECK-NEXT: "col": 9,
+// CHECK-NEXT: "tokLen": 23
+// CHECK-NEXT: }
+// CHECK-NEXT: },
+// CHECK-NEXT: "name": "::TestUsingShadowDeclType"
+// CHECK-NEXT: },
+// CHECK-NEXT: {
+// CHECK-NEXT: "id": "0x{{.*}}",
+// CHECK-NEXT: "kind": "UsingShadowDecl",
+// CHECK-NEXT: "loc": {
+// CHECK-NEXT: "col": 9,
+// CHECK-NEXT: "tokLen": 23
+// CHECK-NEXT: },
+// CHECK-NEXT: "range": {
+// CHECK-NEXT: "begin": {
+// CHECK-NEXT: "col": 9,
+// CHECK-NEXT: "tokLen": 23
+// CHECK-NEXT: },
+// CHECK-NEXT: "end": {
+// CHECK-NEXT: "col": 9,
+// CHECK-NEXT: "tokLen": 23
+// CHECK-NEXT: }
+// CHECK-NEXT: },
+// CHECK-NEXT: "isImplicit": true,
+// CHECK-NEXT: "target": {
+// CHECK-NEXT: "id": "0x{{.*}}",
+// CHECK-NEXT: "kind": "TypedefDecl",
+// CHECK-NEXT: "name": "TestUsingShadowDeclType"
+// CHECK-NEXT: },
+// CHECK-NEXT: "inner": [
+// CHECK-NEXT: {
+// CHECK-NEXT: "id": "0x0"
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
Modified: cfe/trunk/test/AST/gen_ast_dump_json_test.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/AST/gen_ast_dump_json_test.py?rev=370401&r1=370400&r2=370401&view=diff
==============================================================================
--- cfe/trunk/test/AST/gen_ast_dump_json_test.py (original)
+++ cfe/trunk/test/AST/gen_ast_dump_json_test.py Thu Aug 29 13:00:40 2019
@@ -20,7 +20,7 @@ def normalize(dict_var):
normalize(e)
elif type(v) is unicode:
st = v.encode('utf-8')
- if re.match(r"0x[0-9A-Fa-f]+", v):
+ if v != "0x0" and re.match(r"0x[0-9A-Fa-f]+", v):
dict_var[k] = u'0x{{.*}}'
elif os.path.isfile(v):
dict_var[k] = u'{{.*}}'
More information about the cfe-commits
mailing list