Author: ahatanak Date: Fri Sep 9 22:29:43 2016 New Revision: 281132 URL: http://llvm.org/viewvc/llvm-project?rev=281132&view=rev Log: [tablegen] Check that an optional IdentifierArgument of an attribute is provided before trying to print it.
This fixes a segfault that occurs when function printPretty generated by tablegen tries to print an optional argument of attribute objc_bridge_related. rdar://problem/28155469 Modified: cfe/trunk/test/Misc/ast-print-objectivec.m cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Modified: cfe/trunk/test/Misc/ast-print-objectivec.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/ast-print-objectivec.m?rev=281132&r1=281131&r2=281132&view=diff ============================================================================== --- cfe/trunk/test/Misc/ast-print-objectivec.m (original) +++ cfe/trunk/test/Misc/ast-print-objectivec.m Fri Sep 9 22:29:43 2016 @@ -39,3 +39,9 @@ // CHECK: } // CHECK: @end + +@class C1; +struct __attribute__((objc_bridge_related(C1,,))) S1; + +// CHECK: @class C1; +// CHECK: struct __attribute__((objc_bridge_related(C1, , ))) S1; Modified: cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp?rev=281132&r1=281131&r2=281132&view=diff ============================================================================== --- cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp (original) +++ cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Fri Sep 9 22:29:43 2016 @@ -299,7 +299,13 @@ namespace { OS << "\" << get" << getUpperName() << "()->getNameInfo().getAsString() << \""; } else if (type == "IdentifierInfo *") { - OS << "\" << get" << getUpperName() << "()->getName() << \""; + OS << "\";\n"; + if (isOptional()) + OS << " if (get" << getUpperName() << "()) "; + else + OS << " "; + OS << "OS << get" << getUpperName() << "()->getName();\n"; + OS << " OS << \""; } else if (type == "TypeSourceInfo *") { OS << "\" << get" << getUpperName() << "().getAsString() << \""; } else { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits