diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2015-11-30 15:25:34 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2015-11-30 15:25:34 +0000 |
commit | 415c414bf2940bbdc2ad0ec8dde7c2a8b1f6f754 (patch) | |
tree | b41b5b519386bb47dd24d4816ba38d41690a840a | |
parent | 33c95f08b08d8cfce053136a168d12179e79b787 (diff) | |
download | bcm5719-llvm-415c414bf2940bbdc2ad0ec8dde7c2a8b1f6f754.tar.gz bcm5719-llvm-415c414bf2940bbdc2ad0ec8dde7c2a8b1f6f754.zip |
Do not crash when dumping the objc_bridge_related attribute when its optional arguments are not supplied.
Patch thanks to Joe Ranieri!
llvm-svn: 254303
-rw-r--r-- | clang/include/clang/Basic/Attr.td | 4 | ||||
-rw-r--r-- | clang/test/Misc/ast-dump-attr.cpp | 4 | ||||
-rw-r--r-- | clang/utils/TableGen/ClangAttrEmitter.cpp | 2 |
3 files changed, 8 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 1281c3f4775..c761aa9451a 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1087,8 +1087,8 @@ def ObjCBridgeRelated : InheritableAttr { let Spellings = [GNU<"objc_bridge_related">]; let Subjects = SubjectList<[Record], ErrorDiag>; let Args = [IdentifierArgument<"RelatedClass">, - IdentifierArgument<"ClassMethod">, - IdentifierArgument<"InstanceMethod">]; + IdentifierArgument<"ClassMethod", 1>, + IdentifierArgument<"InstanceMethod", 1>]; let HasCustomParsing = 1; let Documentation = [Undocumented]; } diff --git a/clang/test/Misc/ast-dump-attr.cpp b/clang/test/Misc/ast-dump-attr.cpp index ed6d1f5781d..e0575cb18d8 100644 --- a/clang/test/Misc/ast-dump-attr.cpp +++ b/clang/test/Misc/ast-dump-attr.cpp @@ -150,3 +150,7 @@ void f() { // CHECK: DeprecatedAttr } } + +struct __attribute__((objc_bridge_related(NSParagraphStyle,,))) TestBridgedRef; +// CHECK: CXXRecordDecl{{.*}} struct TestBridgedRef +// CHECK-NEXT: ObjCBridgeRelatedAttr{{.*}} NSParagraphStyle diff --git a/clang/utils/TableGen/ClangAttrEmitter.cpp b/clang/utils/TableGen/ClangAttrEmitter.cpp index 0c285764981..09d7aee3c33 100644 --- a/clang/utils/TableGen/ClangAttrEmitter.cpp +++ b/clang/utils/TableGen/ClangAttrEmitter.cpp @@ -279,6 +279,8 @@ namespace { OS << " OS << \" \";\n"; OS << " dumpBareDeclRef(SA->get" << getUpperName() << "());\n"; } else if (type == "IdentifierInfo *") { + if (isOptional()) + OS << " if (SA->get" << getUpperName() << "())\n "; OS << " OS << \" \" << SA->get" << getUpperName() << "()->getName();\n"; } else if (type == "TypeSourceInfo *") { |