summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2018-04-30 22:14:29 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2018-04-30 22:14:29 +0000
commit85f87dd91a3a5a947f6516a4fe76616d88fcf556 (patch)
treee88194684e358bd4a0c2fb325b54e6c099f10506 /clang/test
parent13d759f87e22a7919ccbad36dff4b5a4cf7f48f3 (diff)
downloadbcm5719-llvm-85f87dd91a3a5a947f6516a4fe76616d88fcf556.tar.gz
bcm5719-llvm-85f87dd91a3a5a947f6516a4fe76616d88fcf556.zip
[Modules] Handle ObjC/C ODR-like semantics for EnumConstantDecl
Support for ObjC/C ODR-like semantics with structural equivalence checking was added back in r306918. There enums are handled and also checked for structural equivalence. However, at use time of EnumConstantDecl, support was missing for preventing ambiguous name lookup. Add the missing bits for properly merging EnumConstantDecl. rdar://problem/38374569 llvm-svn: 331232
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a.h1
-rw-r--r--clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a0.h1
-rw-r--r--clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Modules/module.modulemap6
-rw-r--r--clang/test/Modules/Inputs/non-ambiguous-enum/B.framework/Headers/b.h6
-rw-r--r--clang/test/Modules/non-ambiguous-enum.m10
5 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a.h b/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a.h
new file mode 100644
index 00000000000..060bc499738
--- /dev/null
+++ b/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a.h
@@ -0,0 +1 @@
+#include <A/a0.h>
diff --git a/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a0.h b/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a0.h
new file mode 100644
index 00000000000..2e4d0912119
--- /dev/null
+++ b/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Headers/a0.h
@@ -0,0 +1 @@
+#include <B/b.h>
diff --git a/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Modules/module.modulemap b/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Modules/module.modulemap
new file mode 100644
index 00000000000..d9a1981d53c
--- /dev/null
+++ b/clang/test/Modules/Inputs/non-ambiguous-enum/A.framework/Modules/module.modulemap
@@ -0,0 +1,6 @@
+
+framework module A {
+ header "a.h"
+ //module * { export * }
+ export *
+}
diff --git a/clang/test/Modules/Inputs/non-ambiguous-enum/B.framework/Headers/b.h b/clang/test/Modules/Inputs/non-ambiguous-enum/B.framework/Headers/b.h
new file mode 100644
index 00000000000..def44e3a634
--- /dev/null
+++ b/clang/test/Modules/Inputs/non-ambiguous-enum/B.framework/Headers/b.h
@@ -0,0 +1,6 @@
+typedef long NSInteger;
+typedef enum __attribute__((flag_enum,enum_extensibility(open))) MyObjCEnum : NSInteger MyObjCEnum;
+
+enum MyObjCEnum : NSInteger {
+ MyEnumCst = 1,
+} __attribute__((availability(ios,introduced=11.0))) __attribute__((availability(tvos,unavailable))) ;
diff --git a/clang/test/Modules/non-ambiguous-enum.m b/clang/test/Modules/non-ambiguous-enum.m
new file mode 100644
index 00000000000..f6d2a3ecb6d
--- /dev/null
+++ b/clang/test/Modules/non-ambiguous-enum.m
@@ -0,0 +1,10 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -F%S/Inputs/non-ambiguous-enum -fsyntax-only %s -verify
+#import <B/B.h>
+#import <A/A.h>
+
+// expected-no-diagnostics
+
+int foo() {
+ return MyEnumCst;
+}
OpenPOWER on IntegriCloud