summaryrefslogtreecommitdiff
path: root/test/Sema
diff options
context:
space:
mode:
Diffstat (limited to 'test/Sema')
-rw-r--r--test/Sema/tls.c6
-rw-r--r--test/Sema/varargs-aarch64.c11
-rw-r--r--test/Sema/varargs-x86-32.c2
-rw-r--r--test/Sema/zvector2.c211
4 files changed, 226 insertions, 4 deletions
diff --git a/test/Sema/tls.c b/test/Sema/tls.c
index a3fdc8ea51320..6d10363305ff4 100644
--- a/test/Sema/tls.c
+++ b/test/Sema/tls.c
@@ -12,9 +12,9 @@
// RUN: %clang_cc1 -triple x86_64-pc-win32 -fsyntax-only %s
// RUN: %clang_cc1 -triple i386-pc-win32 -fsyntax-only %s
-// OpenBSD does not suppport TLS.
-// RUN: not %clang_cc1 -triple x86_64-pc-openbsd -fsyntax-only %s
-// RUN: not %clang_cc1 -triple i386-pc-openbsd -fsyntax-only %s
+// OpenBSD suppports TLS.
+// RUN: %clang_cc1 -triple x86_64-pc-openbsd -fsyntax-only %s
+// RUN: %clang_cc1 -triple i386-pc-openbsd -fsyntax-only %s
// Haiku does not suppport TLS.
// RUN: not %clang_cc1 -triple i586-pc-haiku -fsyntax-only %s
diff --git a/test/Sema/varargs-aarch64.c b/test/Sema/varargs-aarch64.c
new file mode 100644
index 0000000000000..145c82105610e
--- /dev/null
+++ b/test/Sema/varargs-aarch64.c
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s -triple aarch64-linux-gnu
+
+void f1(int a, ...) {
+ __builtin_ms_va_list ap;
+ __builtin_ms_va_start(ap, a); // expected-error {{'__builtin_ms_va_start' used in System V ABI function}}
+}
+
+void __attribute__((ms_abi)) f2(int a, ...) {
+ __builtin_va_list ap;
+ __builtin_va_start(ap, a); // expected-error {{'va_start' used in Win64 ABI function}}
+}
diff --git a/test/Sema/varargs-x86-32.c b/test/Sema/varargs-x86-32.c
index 6f57022ffcbf4..0359e65892f09 100644
--- a/test/Sema/varargs-x86-32.c
+++ b/test/Sema/varargs-x86-32.c
@@ -1,5 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s -triple i386-apple-darwin9
void foo(int a, ...) {
- __builtin_ms_va_start((void *)0, a); // expected-error {{this builtin is only available on x86-64 targets}}
+ __builtin_ms_va_start((void *)0, a); // expected-error {{this builtin is only available on x86-64 and aarch64 targets}}
}
diff --git a/test/Sema/zvector2.c b/test/Sema/zvector2.c
new file mode 100644
index 0000000000000..0adc0315f0b82
--- /dev/null
+++ b/test/Sema/zvector2.c
@@ -0,0 +1,211 @@
+// RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector -target-cpu z14 \
+// RUN: -fno-lax-vector-conversions -W -Wall -Wconversion \
+// RUN: -Werror -fsyntax-only -verify %s
+
+vector signed char sc, sc2;
+vector unsigned char uc, uc2;
+vector bool char bc, bc2;
+
+vector signed short ss, ss2;
+vector unsigned short us, us2;
+vector bool short bs, bs2;
+
+vector signed int si, si2;
+vector unsigned int ui, ui2;
+vector bool int bi, bi2;
+
+vector signed long long sl, sl2;
+vector unsigned long long ul, ul2;
+vector bool long long bl, bl2;
+
+vector double fd, fd2;
+
+vector float ff, ff2;
+
+void foo(void)
+{
+ // -------------------------------------------------------------------------
+ // Test assignment.
+ // -------------------------------------------------------------------------
+
+ ff = ff2;
+
+ sc = ff2; // expected-error {{incompatible type}}
+ ff = sc2; // expected-error {{incompatible type}}
+
+ uc = ff2; // expected-error {{incompatible type}}
+ ff = uc2; // expected-error {{incompatible type}}
+
+ bc = ff2; // expected-error {{incompatible type}}
+ ff = bc2; // expected-error {{incompatible type}}
+
+ fd = ff2; // expected-error {{incompatible type}}
+ ff = fd2; // expected-error {{incompatible type}}
+
+ // -------------------------------------------------------------------------
+ // Test casts to same element width.
+ // -------------------------------------------------------------------------
+
+ ui = (vector unsigned int)ff2;
+ ff = (vector float)si2;
+
+ // -------------------------------------------------------------------------
+ // Test casts to different element width.
+ // -------------------------------------------------------------------------
+
+ uc = (vector unsigned char)ff2;
+ us = (vector unsigned short)ff2;
+ ul = (vector unsigned long long)ff2;
+
+ ff = (vector float)sc2;
+ ff = (vector float)ss2;
+ ff = (vector float)sl2;
+
+ // -------------------------------------------------------------------------
+ // Test unary operators.
+ // -------------------------------------------------------------------------
+
+ ++ff2;
+ ff++;
+
+ --ff2;
+ ff--;
+
+ ff = +ff2;
+
+ ff = -ff2;
+
+ ff = ~ff2; // expected-error {{invalid argument}}
+
+ // -------------------------------------------------------------------------
+ // Test binary arithmetic operators.
+ // -------------------------------------------------------------------------
+
+ ff = ff + ff2;
+ ff = ff + ui2; // expected-error {{cannot convert}}
+ ff = si + ff2; // expected-error {{cannot convert}}
+ ff = fd + ff2; // expected-error {{cannot convert}}
+ ff += ff2;
+ ff += fd2; // expected-error {{cannot convert}}
+ sc += ff2; // expected-error {{cannot convert}}
+
+ ff = ff - ff2;
+ ff = ff - ui2; // expected-error {{cannot convert}}
+ ff = si - ff2; // expected-error {{cannot convert}}
+ ff = fd - ff2; // expected-error {{cannot convert}}
+ ff -= ff2;
+ ff -= fd2; // expected-error {{cannot convert}}
+ sc -= ff2; // expected-error {{cannot convert}}
+
+ ff = ff * ff2;
+ ff = ff * ui2; // expected-error {{cannot convert}}
+ ff = si * ff2; // expected-error {{cannot convert}}
+ ff = fd * ff2; // expected-error {{cannot convert}}
+ ff *= ff2;
+ ff *= fd2; // expected-error {{cannot convert}}
+ sc *= ff2; // expected-error {{cannot convert}}
+
+ ff = ff / ff2;
+ ff = ff / ui2; // expected-error {{cannot convert}}
+ ff = si / ff2; // expected-error {{cannot convert}}
+ ff = fd / ff2; // expected-error {{cannot convert}}
+ ff /= ff2;
+ ff /= fd2; // expected-error {{cannot convert}}
+ sc /= ff2; // expected-error {{cannot convert}}
+
+ ff = ff % ff2; // expected-error {{invalid operands}}
+ ff = ff % ui2; // expected-error {{invalid operands}}
+ ff = si % ff2; // expected-error {{invalid operands}}
+ ff = fd % ff2; // expected-error {{invalid operands}}
+ ff %= ff2; // expected-error {{invalid operands}}
+ ff %= fd2; // expected-error {{invalid operands}}
+ sc %= ff2; // expected-error {{invalid operands}}
+
+ // -------------------------------------------------------------------------
+ // Test bitwise binary operators.
+ // -------------------------------------------------------------------------
+
+ ff = ff & ff2; // expected-error {{invalid operands}}
+ ff = bi & ff2; // expected-error {{invalid operands}}
+ ff = fd & ff2; // expected-error {{invalid operands}}
+ ff = ff & bi2; // expected-error {{invalid operands}}
+ ff = ff & si2; // expected-error {{invalid operands}}
+ ff = ff & ui2; // expected-error {{invalid operands}}
+ sc &= ff2; // expected-error {{invalid operands}}
+ ff &= bc2; // expected-error {{invalid operands}}
+ ff &= fd2; // expected-error {{invalid operands}}
+
+ ff = ff | ff2; // expected-error {{invalid operands}}
+ ff = bi | ff2; // expected-error {{invalid operands}}
+ ff = fd | ff2; // expected-error {{invalid operands}}
+ ff = ff | bi2; // expected-error {{invalid operands}}
+ ff = ff | si2; // expected-error {{invalid operands}}
+ ff = ff | ui2; // expected-error {{invalid operands}}
+ sc |= ff2; // expected-error {{invalid operands}}
+ ff |= bc2; // expected-error {{invalid operands}}
+ ff |= fd2; // expected-error {{invalid operands}}
+
+ ff = ff ^ ff2; // expected-error {{invalid operands}}
+ ff = bi ^ ff2; // expected-error {{invalid operands}}
+ ff = fd ^ ff2; // expected-error {{invalid operands}}
+ ff = ff ^ bi2; // expected-error {{invalid operands}}
+ ff = ff ^ si2; // expected-error {{invalid operands}}
+ ff = ff ^ ui2; // expected-error {{invalid operands}}
+ sc ^= ff2; // expected-error {{invalid operands}}
+ ff ^= bc2; // expected-error {{invalid operands}}
+ ff ^= fd2; // expected-error {{invalid operands}}
+
+ // -------------------------------------------------------------------------
+ // Test shift operators.
+ // -------------------------------------------------------------------------
+
+ ff = ff << ff2; // expected-error {{integer is required}}
+ ff = ff << fd2; // expected-error {{integer is required}}
+ ff = ff << ui2; // expected-error {{integer is required}}
+ ff = sl << ff2; // expected-error {{integer is required}}
+ sc <<= ff2; // expected-error {{integer is required}}
+ ff <<= ff2; // expected-error {{integer is required}}
+ fd <<= ff2; // expected-error {{integer is required}}
+
+ ff = ff >> ff2; // expected-error {{integer is required}}
+ ff = ff >> fd2; // expected-error {{integer is required}}
+ ff = ff >> ui2; // expected-error {{integer is required}}
+ ff = sl >> ff2; // expected-error {{integer is required}}
+ sc >>= ff2; // expected-error {{integer is required}}
+ ff >>= ff2; // expected-error {{integer is required}}
+ fd >>= ff2; // expected-error {{integer is required}}
+
+ // -------------------------------------------------------------------------
+ // Test comparison operators.
+ // -------------------------------------------------------------------------
+
+ (void)(ff == ff2);
+ (void)(ff == fd2); // expected-error {{cannot convert}}
+ (void)(ff == ui2); // expected-error {{cannot convert}}
+ (void)(ui == ff2); // expected-error {{cannot convert}}
+
+ (void)(ff != ff2);
+ (void)(ff != fd2); // expected-error {{cannot convert}}
+ (void)(ff != ui2); // expected-error {{cannot convert}}
+ (void)(ui != ff2); // expected-error {{cannot convert}}
+
+ (void)(ff <= ff2);
+ (void)(ff <= fd2); // expected-error {{cannot convert}}
+ (void)(ff <= ui2); // expected-error {{cannot convert}}
+ (void)(ui <= ff2); // expected-error {{cannot convert}}
+
+ (void)(ff >= ff2);
+ (void)(ff >= fd2); // expected-error {{cannot convert}}
+ (void)(ff >= ui2); // expected-error {{cannot convert}}
+ (void)(ui >= ff2); // expected-error {{cannot convert}}
+
+ (void)(ff < ff2);
+ (void)(ff < fd2); // expected-error {{cannot convert}}
+ (void)(ff < ui2); // expected-error {{cannot convert}}
+ (void)(ui < ff2); // expected-error {{cannot convert}}
+
+ (void)(ff > ff2);
+ (void)(ff > fd2); // expected-error {{cannot convert}}
+ (void)(ff > ui2); // expected-error {{cannot convert}}
+ (void)(ui > ff2); // expected-error {{cannot convert}}
+}