Fix missing error for use of 128-bit integer inside SPIR64 device code.
authorJennifer Yu <jennifer.yu@intel.com>
Fri, 4 Dec 2020 22:54:12 +0000 (14:54 -0800)
committerJennifer Yu <jennifer.yu@intel.com>
Mon, 7 Dec 2020 18:42:32 +0000 (10:42 -0800)
commitf8d5b49c786f5766aa89b59606bd4c4ae10b46f6
tree768351c9b630143f23b8ba8b5d4c21270744df2f
parent49921d1c3cee2d1c248a3654331384e648457435
Fix missing error for use of 128-bit integer inside SPIR64 device code.
Emit error for use of 128-bit integer inside device code had been
already implemented in https://reviews.llvm.org/D74387.  However,
the error is not emitted for SPIR64, because for SPIR64, hasInt128Type
return true.

hasInt128Type: is also used to control generation of certain 128-bit
predefined macros, initializer predefined 128-bit integer types and
build 128-bit ArithmeticTypes.  Except predefined macros, only the
device target is considered, since error only emit when 128-bit
integer is used inside device code, the host target (auxtarget) also
needs to be considered.

The change address:
1. (SPIR.h) Correct hasInt128Type() for SPIR targets.
2. Sema.cpp and SemaOverload.cpp: Add additional check to consider host
   target(auxtarget) when call to hasInt128Type.  So that __int128_t
   and __int128() are allowed to avoid error when they used outside
   device code.
3. SemaType.cpp: add check for SYCLIsDevice to delay the error message.
   The error will be emitted if the use of 128-bit integer in the device
   code.

   Reviewed By: Johannes Doerfert and Aaron Ballman

   Differential Revision: https://reviews.llvm.org/D92439
clang/lib/Basic/Targets/SPIR.h
clang/lib/Sema/Sema.cpp
clang/lib/Sema/SemaOverload.cpp
clang/lib/Sema/SemaType.cpp
clang/test/CodeGen/ext-int-cc.c
clang/test/SemaSYCL/int128.cpp [new file with mode: 0644]