summaryrefslogtreecommitdiffstats
path: root/clang/test/Modules/odr_hash-vector.cpp
diff options
context:
space:
mode:
authorRichard Trieu <rtrieu@google.com>2018-09-04 22:53:19 +0000
committerRichard Trieu <rtrieu@google.com>2018-09-04 22:53:19 +0000
commit22ddc282b5df5b651bee678900788699dd70b95e (patch)
tree9d32281a097fb075e5969cbc4f26cf9d90a936f5 /clang/test/Modules/odr_hash-vector.cpp
parent470db781151d240e12c3a7f1000b54b0b2c8fcde (diff)
downloadbcm5719-llvm-22ddc282b5df5b651bee678900788699dd70b95e.tar.gz
bcm5719-llvm-22ddc282b5df5b651bee678900788699dd70b95e.zip
[ODRHash] Extend hash to support all Type's.
llvm-svn: 341421
Diffstat (limited to 'clang/test/Modules/odr_hash-vector.cpp')
-rw-r--r--clang/test/Modules/odr_hash-vector.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/clang/test/Modules/odr_hash-vector.cpp b/clang/test/Modules/odr_hash-vector.cpp
new file mode 100644
index 00000000000..ee59cb617c1
--- /dev/null
+++ b/clang/test/Modules/odr_hash-vector.cpp
@@ -0,0 +1,128 @@
+// Clear and create directories
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: mkdir %t/cache
+// RUN: mkdir %t/Inputs
+
+// Build first header file
+// RUN: echo "#define FIRST" >> %t/Inputs/first.h
+// RUN: cat %s >> %t/Inputs/first.h
+
+// Build second header file
+// RUN: echo "#define SECOND" >> %t/Inputs/second.h
+// RUN: cat %s >> %t/Inputs/second.h
+
+// Test that each header can compile
+// RUN: %clang_cc1 -fsyntax-only -x c++ -std=c++11 %t/Inputs/first.h -fzvector
+// RUN: %clang_cc1 -fsyntax-only -x c++ -std=c++11 %t/Inputs/second.h -fzvector
+
+// Build module map file
+// RUN: echo "module FirstModule {" >> %t/Inputs/module.map
+// RUN: echo " header \"first.h\"" >> %t/Inputs/module.map
+// RUN: echo "}" >> %t/Inputs/module.map
+// RUN: echo "module SecondModule {" >> %t/Inputs/module.map
+// RUN: echo " header \"second.h\"" >> %t/Inputs/module.map
+// RUN: echo "}" >> %t/Inputs/module.map
+
+// Run test
+// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/cache -x c++ -I%t/Inputs -verify %s -std=c++11 -fzvector
+
+#if !defined(FIRST) && !defined(SECOND)
+#include "first.h"
+#include "second.h"
+#endif
+
+namespace Types {
+namespace Vector {
+#if defined(FIRST)
+struct Invalid1 {
+ __attribute((vector_size(8))) int x;
+};
+struct Invalid2 {
+ __attribute((vector_size(8))) int x;
+};
+struct Invalid3 {
+ __attribute((vector_size(16))) int x;
+};
+struct Valid {
+ __attribute((vector_size(8))) int x1;
+ __attribute((vector_size(16))) int x2;
+ __attribute((vector_size(8))) unsigned x3;
+ __attribute((vector_size(16))) long x4;
+ vector unsigned x5;
+ vector int x6;
+};
+#elif defined(SECOND)
+struct Invalid1 {
+ __attribute((vector_size(16))) int x;
+};
+struct Invalid2 {
+ __attribute((vector_size(8))) unsigned x;
+};
+struct Invalid3 {
+ vector unsigned x;
+};
+struct Valid {
+ __attribute((vector_size(8))) int x1;
+ __attribute((vector_size(16))) int x2;
+ __attribute((vector_size(8))) unsigned x3;
+ __attribute((vector_size(16))) long x4;
+ vector unsigned x5;
+ vector int x6;
+};
+#else
+Invalid1 i1;
+// expected-error@second.h:* {{'Types::Vector::Invalid1::x' from module 'SecondModule' is not present in definition of 'Types::Vector::Invalid1' in module 'FirstModule'}}
+// expected-note@first.h:* {{declaration of 'x' does not match}}
+Invalid2 i2;
+// expected-error@second.h:* {{'Types::Vector::Invalid2::x' from module 'SecondModule' is not present in definition of 'Types::Vector::Invalid2' in module 'FirstModule'}}
+// expected-note@first.h:* {{declaration of 'x' does not match}}
+Invalid3 i3;
+// expected-error@second.h:* {{'Types::Vector::Invalid3::x' from module 'SecondModule' is not present in definition of 'Types::Vector::Invalid3' in module 'FirstModule'}}
+// expected-note@first.h:* {{declaration of 'x' does not match}}
+
+Valid v;
+#endif
+} // namespace Vector
+
+
+
+namespace ExtVector {
+} // namespace ExtVector
+#if defined(FIRST)
+struct Invalid {
+ using f = __attribute__((ext_vector_type(4))) float;
+};
+struct Valid {
+ using f = __attribute__((ext_vector_type(8))) float;
+};
+#elif defined(SECOND)
+struct Invalid {
+ using f = __attribute__((ext_vector_type(8))) float;
+};
+struct Valid {
+ using f = __attribute__((ext_vector_type(8))) float;
+};
+#else
+Invalid i;
+// expected-error@first.h:* {{'Types::Invalid::f' from module 'FirstModule' is not present in definition of 'Types::Invalid' in module 'SecondModule'}}
+// expected-note@second.h:* {{declaration of 'f' does not match}}
+
+Valid v;
+#endif
+
+} // namespace Types
+
+
+// Keep macros contained to one file.
+#ifdef FIRST
+#undef FIRST
+#endif
+
+#ifdef SECOND
+#undef SECOND
+#endif
+
+#ifdef ACCESS
+#undef ACCESS
+#endif
OpenPOWER on IntegriCloud