File tree Expand file tree Collapse file tree 5 files changed +33
-3
lines changed Expand file tree Collapse file tree 5 files changed +33
-3
lines changed Original file line number Diff line number Diff line change @@ -68,6 +68,9 @@ It can be used like this:
68
68
``__has_builtin `` should not be used to detect support for a builtin macro;
69
69
use ``#ifdef `` instead.
70
70
71
+ When compiling with target offloading, ``__has_builtin `` only considers the
72
+ currently active target.
73
+
71
74
``__has_constexpr_builtin ``
72
75
---------------------------
73
76
Original file line number Diff line number Diff line change @@ -37,6 +37,8 @@ Potentially Breaking Changes
37
37
C/C++ Language Potentially Breaking Changes
38
38
-------------------------------------------
39
39
40
+ - The ``__has_builtin `` function now only considers the currently active target when being used with target offloading.
41
+
40
42
C++ Specific Potentially Breaking Changes
41
43
-----------------------------------------
42
44
- For C++20 modules, the Reduced BMI mode will be the default option. This may introduce
Original file line number Diff line number Diff line change @@ -1760,7 +1760,8 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
1760
1760
Tok, *this , diag::err_feature_check_malformed);
1761
1761
if (!II)
1762
1762
return false ;
1763
- else if (II->getBuiltinID () != 0 ) {
1763
+ unsigned BuiltinID = II->getBuiltinID ();
1764
+ if (BuiltinID != 0 ) {
1764
1765
switch (II->getBuiltinID ()) {
1765
1766
case Builtin::BI__builtin_cpu_is:
1766
1767
return getTargetInfo ().supportsCpuIs ();
@@ -1774,8 +1775,11 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
1774
1775
// usual allocation and deallocation functions. Required by libc++
1775
1776
return 201802 ;
1776
1777
default :
1778
+ // __has_builtin should return false for aux builtins.
1779
+ if (getBuiltinInfo ().isAuxBuiltinID (BuiltinID))
1780
+ return false ;
1777
1781
return Builtin::evaluateRequiredTargetFeatures (
1778
- getBuiltinInfo ().getRequiredFeatures (II-> getBuiltinID () ),
1782
+ getBuiltinInfo ().getRequiredFeatures (BuiltinID ),
1779
1783
getTargetInfo ().getTargetOpts ().FeatureMap );
1780
1784
}
1781
1785
return true ;
Original file line number Diff line number Diff line change 3
3
// RUN: %clang_cc1 %s -ffreestanding -fms-extensions -fms-compatibility \
4
4
// RUN: -fms-compatibility-version=19.00 -triple x86_64-pc-windows-msvc -emit-llvm -o -
5
5
// %clang_cc1 %s -ffreestanding -triple x86_64-w64-windows-gnu -fms-extensions -emit-llvm -o -
6
- // RUN: %clang_cc1 %s -ffreestanding -fopenmp -fopenmp-is-target-device -aux-triple x86_64-unknown-linux-gnu
6
+ //
7
+ // FIXME: See https://github.com/llvm/llvm-project/pull/121839 and
8
+ // FIXME: https://github.com/llvm/llvm-project/pull/126324
9
+ // RUN: not %clang_cc1 %s -ffreestanding -fopenmp -fopenmp-is-target-device -aux-triple x86_64-unknown-linux-gnu
7
10
8
11
typedef __SIZE_TYPE__ size_t ;
9
12
Original file line number Diff line number Diff line change
1
+ // RUN: %clang_cc1 -fopenmp -triple=spirv64 -fopenmp-is-target-device \
2
+ // RUN: -aux-triple x86_64-linux-unknown -E %s | FileCheck -implicit-check-not=BAD %s
3
+
4
+ // RUN: %clang_cc1 -fopenmp -triple=nvptx64 -fopenmp-is-target-device \
5
+ // RUN: -aux-triple x86_64-linux-unknown -E %s | FileCheck -implicit-check-not=BAD %s
6
+
7
+ // RUN: %clang_cc1 -fopenmp -triple=amdgcn-amd-amdhsa -fopenmp-is-target-device \
8
+ // RUN: -aux-triple x86_64-linux-unknown -E %s | FileCheck -implicit-check-not=BAD %s
9
+
10
+ // RUN: %clang_cc1 -fopenmp -triple=aarch64 -fopenmp-is-target-device \
11
+ // RUN: -aux-triple x86_64-linux-unknown -E %s | FileCheck -implicit-check-not=BAD %s
12
+
13
+ // CHECK: GOOD
14
+ #if __has_builtin(__builtin_ia32_pause)
15
+ BAD
16
+ #else
17
+ GOOD
18
+ #endif
You can’t perform that action at this time.
0 commit comments