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'{{.*}}' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits