]> granicus.if.org Git - clang/commit
Sema: Fix explicit address space cast in C++
authorYaxun Liu <Yaxun.Liu@amd.com>
Fri, 20 Jul 2018 11:32:51 +0000 (11:32 +0000)
committerYaxun Liu <Yaxun.Liu@amd.com>
Fri, 20 Jul 2018 11:32:51 +0000 (11:32 +0000)
commit0bb7730cf5a4fff5ff9caad7d38bc7ca193aa9c4
tree114a1607db63966c291555ab5efcd0e10e4d7c9a
parent1a8f8375fb2268e94c72dbc26c55992702d8ca6c
Sema: Fix explicit address space cast in C++

Currently clang does not allow implicit cast of a pointer to a pointer type
in different address space but allows C-style cast of a pointer to a pointer
type in different address space. However, there is a bug in Sema causing
incorrect Cast Expr in AST for the latter case, which in turn results in
invalid LLVM IR in codegen.

This is because Sema::IsQualificationConversion returns true for a cast of
pointer to a pointer type in different address space, which in turn allows
a standard conversion and results in a cast expression with no op in AST.

This patch fixes that by let Sema::IsQualificationConversion returns false
for a cast of pointer to a pointer type in different address space, which
in turn disallows standard conversion, implicit cast, and static cast.
Finally it results in an reinterpret cast and correct conversion kind is set.

Differential Revision: https://reviews.llvm.org/D49294

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@337540 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Sema/SemaCast.cpp
lib/Sema/SemaOverload.cpp
test/CodeGenCXX/address-space-cast.cpp [new file with mode: 0644]