[Modules][ObjC] Check definition from canonical decl on designated initializers

Use definition from canonical decl when checking for designated
initializers. This is necessary since deserialization of a interface
might reuse the definition from the canonical one (see r281119).

rdar://problem/29360655

llvm-svn: 301382
diff --git a/clang/test/Modules/Inputs/objc-desig-init/A.h b/clang/test/Modules/Inputs/objc-desig-init/A.h
new file mode 100644
index 0000000..02e0105
--- /dev/null
+++ b/clang/test/Modules/Inputs/objc-desig-init/A.h
@@ -0,0 +1 @@
+#import "A2.h"
diff --git a/clang/test/Modules/Inputs/objc-desig-init/A2.h b/clang/test/Modules/Inputs/objc-desig-init/A2.h
new file mode 100644
index 0000000..5a4ceb4
--- /dev/null
+++ b/clang/test/Modules/Inputs/objc-desig-init/A2.h
@@ -0,0 +1,4 @@
+#import "Base.h"
+
+@interface A2 : Base
+@end
diff --git a/clang/test/Modules/Inputs/objc-desig-init/Base.h b/clang/test/Modules/Inputs/objc-desig-init/Base.h
new file mode 100644
index 0000000..4718425
--- /dev/null
+++ b/clang/test/Modules/Inputs/objc-desig-init/Base.h
@@ -0,0 +1,4 @@
+@class NSString;
+@interface Base
+- (id)initWithNibName:(NSString *)nibNameOrNil __attribute__((objc_designated_initializer));
+@end
diff --git a/clang/test/Modules/Inputs/objc-desig-init/X.h b/clang/test/Modules/Inputs/objc-desig-init/X.h
new file mode 100644
index 0000000..cb46ba7
--- /dev/null
+++ b/clang/test/Modules/Inputs/objc-desig-init/X.h
@@ -0,0 +1,4 @@
+#import "A2.h"
+
+@interface X : A2
+@end
diff --git a/clang/test/Modules/Inputs/objc-desig-init/module.modulemap b/clang/test/Modules/Inputs/objc-desig-init/module.modulemap
new file mode 100644
index 0000000..0150efb
--- /dev/null
+++ b/clang/test/Modules/Inputs/objc-desig-init/module.modulemap
@@ -0,0 +1,9 @@
+module Base {
+  header "Base.h"
+  export *
+}
+
+module A {
+  header "A.h"
+  export *
+}
diff --git a/clang/test/Modules/objc-designated-init-mod.m b/clang/test/Modules/objc-designated-init-mod.m
new file mode 100644
index 0000000..15c25a3
--- /dev/null
+++ b/clang/test/Modules/objc-designated-init-mod.m
@@ -0,0 +1,17 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs/objc-desig-init %s -verify
+// expected-no-diagnostics
+
+#import "X.h"
+#import "Base.h"
+#import "A.h"
+
+@implementation X
+
+- (instancetype)initWithNibName:(NSString *)nibName {
+  if ((self = [super initWithNibName:nibName])) {
+		return self;
+  }
+  return self;
+}
+@end