summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2015-11-30 15:25:34 +0000
committerAaron Ballman <aaron@aaronballman.com>2015-11-30 15:25:34 +0000
commit415c414bf2940bbdc2ad0ec8dde7c2a8b1f6f754 (patch)
treeb41b5b519386bb47dd24d4816ba38d41690a840a
parent33c95f08b08d8cfce053136a168d12179e79b787 (diff)
downloadbcm5719-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.td4
-rw-r--r--clang/test/Misc/ast-dump-attr.cpp4
-rw-r--r--clang/utils/TableGen/ClangAttrEmitter.cpp2
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 *") {
OpenPOWER on IntegriCloud