From df6d7b1564d292a339f07b17c7e38511e589be3d Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 24 Oct 2014 13:52:55 +0000 Subject: Fix initializing TypeOfTypeLoc This fixes a crash in the RecursiveASTVisitor on such code __typeof__(struct F*) var[invalid]; The UnderlyingTInfo of a TypeOfTypeLoc was left uninitialized when created from ASTContext::getTrivialTypeSourceInfo This lead to a crash in RecursiveASTVisitor when trying to access it. llvm-svn: 220562 --- .../Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'clang/unittests/Tooling') diff --git a/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp index 22c58836570..63e2e8b6024 100644 --- a/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp +++ b/clang/unittests/Tooling/RecursiveASTVisitorTestTypeLocVisitor.cpp @@ -79,4 +79,15 @@ TEST(RecursiveASTVisitor, VisitsObjCPropertyType) { TypeLocVisitor::Lang_OBJC)); } +TEST(RecursiveASTVisitor, VisitInvalidType) { + TypeLocVisitor Visitor; + // FIXME: It would be nice to have information about subtypes of invalid type + //Visitor.ExpectMatch("typeof(struct F *) []", 1, 1); + // Even if the full type is invalid, it should still find sub types + //Visitor.ExpectMatch("struct F", 1, 19); + EXPECT_FALSE(Visitor.runOver( + "__typeof__(struct F*) var[invalid];\n", + TypeLocVisitor::Lang_C)); +} + } // end anonymous namespace -- cgit v1.2.3