llvm-project/clang/test/SemaCXX/ext-int-asm.cpp
Aaron Ballman 6c75ab5f66 Introduce _BitInt, deprecate _ExtInt
WG14 adopted the _ExtInt feature from Clang for C23, but renamed the
type to be _BitInt. This patch does the vast majority of the work to
rename _ExtInt to _BitInt, which accounts for most of its size. The new
type is exposed in older C modes and all C++ modes as a conforming
extension. However, there are functional changes worth calling out:

* Deprecates _ExtInt with a fix-it to help users migrate to _BitInt.
* Updates the mangling for the type.
* Updates the documentation and adds a release note to warn users what
is going on.
* Adds new diagnostics for use of _BitInt to call out when it's used as
a Clang extension or as a pre-C23 compatibility concern.
* Adds new tests for the new diagnostic behaviors.

I want to call out the ABI break specifically. We do not believe that
this break will cause a significant imposition for early adopters of
the feature, and so this is being done as a full break. If it turns out
there are critical uses where recompilation is not an option for some
reason, we can consider using ABI tags to ease the transition.
2021-12-06 12:52:01 -05:00

12 lines
542 B
C++

// REQUIRES: x86-registered-target
// RUN: %clang_cc1 -fsyntax-only -verify %s -Wimplicit-int-conversion -triple x86_64-gnu-linux -fasm-blocks
void NotAllowedInInlineAsm(_BitInt(9) in, _BitInt(9) out) {
__asm { mov eax, in} // expected-error{{invalid type '_BitInt(9)' in asm input}}
__asm { mov out, eax} // expected-error{{invalid type '_BitInt(9)' in asm output}}
asm("" : "=g" (in));// expected-error{{invalid type '_BitInt(9)' in asm input}}
asm("" :: "r" (out));// expected-error{{invalid type '_BitInt(9)' in asm output}}
}