summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2016-01-28 23:29:02 +0000
committerManman Ren <manman.ren@gmail.com>2016-01-28 23:29:02 +0000
commit2309ae8a8252f29ee943cc6d8d5f0a39eb4bcf3c (patch)
tree932395bf47b9779a9a2fb91ef5bd47da8e319027 /test
parent29ba6ff781a897a7eca8c5f4bd627ab0f372791f (diff)
downloadclang-2309ae8a8252f29ee943cc6d8d5f0a39eb4bcf3c.tar.gz
Check for frontend errors after releasing the Builder.
Frontend can emit errors when releaseing the Builder. If there are errors before or when releasing the Builder, we reset the module to stop here before invoking the backend. Before this commit, clang will continue to invoke the backend and backend can crash. Differential Revision: http://reviews.llvm.org/D16564 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@259116 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/target-builtin-error-3.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGen/target-builtin-error-3.c b/test/CodeGen/target-builtin-error-3.c
new file mode 100644
index 0000000000..5beb474bef
--- /dev/null
+++ b/test/CodeGen/target-builtin-error-3.c
@@ -0,0 +1,28 @@
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -S -verify -o - -target-feature +avx
+
+// RUN: not %clang_cc1 %s -triple=x86_64-apple-darwin -emit-obj -target-feature +avx 2> %t.err
+// RUN: FileCheck < %t.err %s
+// CHECK: 1 error generated
+
+typedef unsigned short uint16_t;
+typedef long long __m128i __attribute__((__vector_size__(16)));
+typedef float __v8sf __attribute__ ((__vector_size__ (32)));
+typedef float __m256 __attribute__ ((__vector_size__ (32)));
+typedef uint16_t half;
+typedef __attribute__ ((ext_vector_type( 8),__aligned__( 16))) half half8;
+typedef __attribute__ ((ext_vector_type(16),__aligned__( 32))) half half16;
+typedef __attribute__ ((ext_vector_type(16),__aligned__( 2))) half half16U;
+typedef __attribute__ ((ext_vector_type( 8),__aligned__( 32))) float float8;
+typedef __attribute__ ((ext_vector_type(16),__aligned__( 64))) float float16;
+static inline half8 __attribute__((__overloadable__)) convert_half( float8 a ) {
+ return __extension__ ({ __m256 __a = (a); (__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)__a, (0x00)); }); // expected-error {{'__builtin_ia32_vcvtps2ph256' needs target feature f16c}}
+}
+static inline half16 __attribute__((__overloadable__)) convert_half( float16 a ) {
+ half16 r;
+ r.lo = convert_half( a.lo);
+ return r;
+}
+void avx_test( uint16_t *destData, float16 argbF)
+{
+ ((half16U*)destData)[0] = convert_half(argbF);
+}