-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libc][test][stdbit] fix -Wimplicit-int-conversion #126616
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
nickdesaulniers
merged 1 commit into
llvm:main
from
nickdesaulniers:implicit_int_conversion_stdbit
Feb 11, 2025
Merged
[libc][test][stdbit] fix -Wimplicit-int-conversion #126616
nickdesaulniers
merged 1 commit into
llvm:main
from
nickdesaulniers:implicit_int_conversion_stdbit
Feb 11, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@llvm/pr-subscribers-libc Author: Nick Desaulniers (nickdesaulniers) ChangesWhen cross compiling the libc-stdbit-tests, the existing tests trigger numerous Full diff: https://github.com/llvm/llvm-project/pull/126616.diff 20 Files Affected:
diff --git a/libc/test/src/stdbit/stdc_bit_ceil_uc_test.cpp b/libc/test/src/stdbit/stdc_bit_ceil_uc_test.cpp
index 1ef87b0d44de64e..fcbb5c82af23a7f 100644
--- a/libc/test/src/stdbit/stdc_bit_ceil_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_bit_ceil_uc_test.cpp
@@ -17,18 +17,18 @@ TEST(LlvmLibcStdcBitceilUcTest, Zero) {
TEST(LlvmLibcStdcBitceilUcTest, Ones) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_uc(1U << i),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_uc(static_cast<unsigned char>(1U << i)),
static_cast<unsigned char>(1U << i));
}
TEST(LlvmLibcStdcBitceilUcTest, OneLessThanPowsTwo) {
for (unsigned i = 2U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_uc((1U << i) - 1),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_uc(static_cast<unsigned char>((1U << i) - 1)),
static_cast<unsigned char>(1U << i));
}
TEST(LlvmLibcStdcBitceilUcTest, OneMoreThanPowsTwo) {
for (unsigned i = 1U; i != UCHAR_WIDTH - 1; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_uc((1U << i) + 1),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_uc(static_cast<unsigned char>((1U << i) + 1)),
static_cast<unsigned char>(1U << (i + 1)));
}
diff --git a/libc/test/src/stdbit/stdc_bit_ceil_us_test.cpp b/libc/test/src/stdbit/stdc_bit_ceil_us_test.cpp
index 56873c51828f104..495c1fd14d84993 100644
--- a/libc/test/src/stdbit/stdc_bit_ceil_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_bit_ceil_us_test.cpp
@@ -17,18 +17,18 @@ TEST(LlvmLibcStdcBitceilUsTest, Zero) {
TEST(LlvmLibcStdcBitceilUsTest, Ones) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_us(1U << i),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_us(static_cast<unsigned short>(1U << i)),
static_cast<unsigned short>(1U << i));
}
TEST(LlvmLibcStdcBitceilUsTest, OneLessThanPowsTwo) {
for (unsigned i = 2U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_us((1U << i) - 1),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_us(static_cast<unsigned short>((1U << i) - 1)),
static_cast<unsigned short>(1U << i));
}
TEST(LlvmLibcStdcBitceilUsTest, OneMoreThanPowsTwo) {
for (unsigned i = 1U; i != USHRT_WIDTH - 1; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_us((1U << i) + 1),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_bit_ceil_us(static_cast<unsigned short>((1U << i) + 1)),
static_cast<unsigned short>(1U << (i + 1)));
}
diff --git a/libc/test/src/stdbit/stdc_first_leading_one_uc_test.cpp b/libc/test/src/stdbit/stdc_first_leading_one_uc_test.cpp
index b8c8db587098e4c..59fbf8bd2912318 100644
--- a/libc/test/src/stdbit/stdc_first_leading_one_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_leading_one_uc_test.cpp
@@ -16,6 +16,6 @@ TEST(LlvmLibcStdcFirstLeadingOneUcTest, Zero) {
TEST(LlvmLibcStdcFirstLeadingOneUcTest, OneHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_one_uc(1U << i),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_one_uc(static_cast<unsigned char>(1U << i)),
UCHAR_WIDTH - i);
}
diff --git a/libc/test/src/stdbit/stdc_first_leading_one_us_test.cpp b/libc/test/src/stdbit/stdc_first_leading_one_us_test.cpp
index e9488335d9b008c..185fbcdb7d19223 100644
--- a/libc/test/src/stdbit/stdc_first_leading_one_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_leading_one_us_test.cpp
@@ -16,6 +16,6 @@ TEST(LlvmLibcStdcFirstLeadingOneUsTest, Zero) {
TEST(LlvmLibcStdcFirstLeadingOneUsTest, OneHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_one_us(1U << i),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_one_us(static_cast<unsigned short>(1U << i)),
USHRT_WIDTH - i);
}
diff --git a/libc/test/src/stdbit/stdc_first_leading_zero_uc_test.cpp b/libc/test/src/stdbit/stdc_first_leading_zero_uc_test.cpp
index ac7e8c7d9e64be3..d98bf7a3d13edac 100644
--- a/libc/test/src/stdbit/stdc_first_leading_zero_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_leading_zero_uc_test.cpp
@@ -16,6 +16,6 @@ TEST(LlvmLibcStdcFirstLeadingZeroUcTest, ALL) {
TEST(LlvmLibcStdcFirstLeadingZeroUcTest, ZeroHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_zero_uc(~(1U << i)),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_zero_uc(static_cast<unsigned char>(~(1U << i))),
UCHAR_WIDTH - i);
}
diff --git a/libc/test/src/stdbit/stdc_first_leading_zero_us_test.cpp b/libc/test/src/stdbit/stdc_first_leading_zero_us_test.cpp
index 37f8612675a7a13..74e44f5d179b7a5 100644
--- a/libc/test/src/stdbit/stdc_first_leading_zero_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_leading_zero_us_test.cpp
@@ -16,6 +16,6 @@ TEST(LlvmLibcStdcFirstLeadingZeroUsTest, ALL) {
TEST(LlvmLibcStdcFirstLeadingZeroUsTest, ZeroHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_zero_us(~(1U << i)),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_leading_zero_us(static_cast<unsigned short>(~(1U << i))),
USHRT_WIDTH - i);
}
diff --git a/libc/test/src/stdbit/stdc_first_trailing_one_uc_test.cpp b/libc/test/src/stdbit/stdc_first_trailing_one_uc_test.cpp
index ed2b4921cdada45..630b444a46feea9 100644
--- a/libc/test/src/stdbit/stdc_first_trailing_one_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_trailing_one_uc_test.cpp
@@ -16,5 +16,5 @@ TEST(LlvmLibcStdcFirstTrailingOneUcTest, ALL) {
TEST(LlvmLibcStdcFirstTrailingOneUcTest, OneHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_one_uc(1U << i), i + 1);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_one_uc(static_cast<unsigned char>(1U << i)), i + 1);
}
diff --git a/libc/test/src/stdbit/stdc_first_trailing_one_us_test.cpp b/libc/test/src/stdbit/stdc_first_trailing_one_us_test.cpp
index 60021552310bee6..c112062ec78e721 100644
--- a/libc/test/src/stdbit/stdc_first_trailing_one_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_trailing_one_us_test.cpp
@@ -16,5 +16,5 @@ TEST(LlvmLibcStdcFirstTrailingOneUsTest, ALL) {
TEST(LlvmLibcStdcFirstTrailingOneUsTest, OneHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_one_us(1U << i), i + 1);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_one_us(static_cast<unsigned short>(1U << i)), i + 1);
}
diff --git a/libc/test/src/stdbit/stdc_first_trailing_zero_uc_test.cpp b/libc/test/src/stdbit/stdc_first_trailing_zero_uc_test.cpp
index 2b17aa6536e6692..1e50765ad9bdce4 100644
--- a/libc/test/src/stdbit/stdc_first_trailing_zero_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_trailing_zero_uc_test.cpp
@@ -16,5 +16,5 @@ TEST(LlvmLibcStdcFirstTrailingZeroUcTest, ALL) {
TEST(LlvmLibcStdcFirstTrailingZeroUcTest, ZeroHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_zero_uc(~(1U << i)), i + 1);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_zero_uc(static_cast<unsigned char>(~(1U << i))), i + 1);
}
diff --git a/libc/test/src/stdbit/stdc_first_trailing_zero_us_test.cpp b/libc/test/src/stdbit/stdc_first_trailing_zero_us_test.cpp
index e370379300e4a48..67d30baa8805254 100644
--- a/libc/test/src/stdbit/stdc_first_trailing_zero_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_first_trailing_zero_us_test.cpp
@@ -16,5 +16,5 @@ TEST(LlvmLibcStdcFirstTrailingZeroUsTest, ALL) {
TEST(LlvmLibcStdcFirstTrailingZeroUsTest, ZeroHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_zero_us(~(1U << i)), i + 1);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_first_trailing_zero_us(static_cast<unsigned short>(~(1U << i))), i + 1);
}
diff --git a/libc/test/src/stdbit/stdc_has_single_bit_uc_test.cpp b/libc/test/src/stdbit/stdc_has_single_bit_uc_test.cpp
index 1bc189cf0b665fd..7f25c141a93b424 100644
--- a/libc/test/src/stdbit/stdc_has_single_bit_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_has_single_bit_uc_test.cpp
@@ -16,5 +16,5 @@ TEST(LlvmLibcStdcHasSingleBitUcTest, Zero) {
TEST(LlvmLibcStdcHasSingleBitUcTest, OneHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_has_single_bit_uc(1U << i), true);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_has_single_bit_uc(static_cast<unsigned char>(1U << i)), true);
}
diff --git a/libc/test/src/stdbit/stdc_has_single_bit_us_test.cpp b/libc/test/src/stdbit/stdc_has_single_bit_us_test.cpp
index a038f6fac012323..aeebeb29f48f6ac 100644
--- a/libc/test/src/stdbit/stdc_has_single_bit_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_has_single_bit_us_test.cpp
@@ -16,5 +16,5 @@ TEST(LlvmLibcStdcHasSingleBitUsTest, Zero) {
TEST(LlvmLibcStdcHasSingleBitUsTest, OneHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_has_single_bit_us(1U << i), true);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_has_single_bit_us(static_cast<unsigned short>(1U << i)), true);
}
diff --git a/libc/test/src/stdbit/stdc_leading_ones_uc_test.cpp b/libc/test/src/stdbit/stdc_leading_ones_uc_test.cpp
index 5d32d92e327a395..7120f608972f4bc 100644
--- a/libc/test/src/stdbit/stdc_leading_ones_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_leading_ones_uc_test.cpp
@@ -17,6 +17,6 @@ TEST(LlvmLibcStdcLeadingOnesUcTest, All) {
TEST(LlvmLibcStdcLeadingOnesUcTest, ZeroHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_uc(~(1U << i)),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_uc(static_cast<unsigned char>(~(1U << i))),
UCHAR_WIDTH - i - 1U);
}
diff --git a/libc/test/src/stdbit/stdc_leading_ones_us_test.cpp b/libc/test/src/stdbit/stdc_leading_ones_us_test.cpp
index 91a125370ec1584..123aa88f494222d 100644
--- a/libc/test/src/stdbit/stdc_leading_ones_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_leading_ones_us_test.cpp
@@ -17,6 +17,6 @@ TEST(LlvmLibcStdcLeadingOnesUsTest, All) {
TEST(LlvmLibcStdcLeadingOnesUsTest, ZeroHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_us(~(1U << i)),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_ones_us(static_cast<unsigned short>(~(1U << i))),
USHRT_WIDTH - i - 1U);
}
diff --git a/libc/test/src/stdbit/stdc_leading_zeros_uc_test.cpp b/libc/test/src/stdbit/stdc_leading_zeros_uc_test.cpp
index 3d555072927acdd..c89a37726472707 100644
--- a/libc/test/src/stdbit/stdc_leading_zeros_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_leading_zeros_uc_test.cpp
@@ -17,6 +17,6 @@ TEST(LlvmLibcStdcLeadingZerosUcTest, Zero) {
TEST(LlvmLibcStdcLeadingZerosUcTest, OneHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_uc(1U << i),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_uc(static_cast<unsigned char>(1U << i)),
UCHAR_WIDTH - i - 1U);
}
diff --git a/libc/test/src/stdbit/stdc_leading_zeros_us_test.cpp b/libc/test/src/stdbit/stdc_leading_zeros_us_test.cpp
index afb418a24ad5423..e2efc028baba0d2 100644
--- a/libc/test/src/stdbit/stdc_leading_zeros_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_leading_zeros_us_test.cpp
@@ -17,6 +17,6 @@ TEST(LlvmLibcStdcLeadingZerosUsTest, Zero) {
TEST(LlvmLibcStdcLeadingZerosUsTest, OneHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_us(1U << i),
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_leading_zeros_us(static_cast<unsigned short>(1U << i)),
USHRT_WIDTH - i - 1U);
}
diff --git a/libc/test/src/stdbit/stdc_trailing_ones_uc_test.cpp b/libc/test/src/stdbit/stdc_trailing_ones_uc_test.cpp
index 79d4e5b8b8032da..43218e65a219a9d 100644
--- a/libc/test/src/stdbit/stdc_trailing_ones_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_trailing_ones_uc_test.cpp
@@ -17,5 +17,5 @@ TEST(LlvmLibcStdcTrailingOnesUcTest, ALL) {
TEST(LlvmLibcStdcTrailingOnesUcTest, ZeroHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_ones_uc(~(1U << i)), i);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_ones_uc(static_cast<unsigned char>(~(1U << i))), i);
}
diff --git a/libc/test/src/stdbit/stdc_trailing_ones_us_test.cpp b/libc/test/src/stdbit/stdc_trailing_ones_us_test.cpp
index 7ab15743ed1e043..d449d34158fb8b9 100644
--- a/libc/test/src/stdbit/stdc_trailing_ones_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_trailing_ones_us_test.cpp
@@ -17,5 +17,5 @@ TEST(LlvmLibcStdcTrailingOnesUsTest, ALL) {
TEST(LlvmLibcStdcTrailingOnesUsTest, ZeroHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_ones_us(~(1U << i)), i);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_ones_us(static_cast<unsigned short>(~(1U << i))), i);
}
diff --git a/libc/test/src/stdbit/stdc_trailing_zeros_uc_test.cpp b/libc/test/src/stdbit/stdc_trailing_zeros_uc_test.cpp
index c02b518865d9f77..b808a8ff3ea7100 100644
--- a/libc/test/src/stdbit/stdc_trailing_zeros_uc_test.cpp
+++ b/libc/test/src/stdbit/stdc_trailing_zeros_uc_test.cpp
@@ -17,5 +17,5 @@ TEST(LlvmLibcStdcTrailingZerosUcTest, Zero) {
TEST(LlvmLibcStdcTrailingZerosUcTest, OneHot) {
for (unsigned i = 0U; i != UCHAR_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_uc(1U << i), i);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_uc(static_cast<unsigned char>(1U << i)), i);
}
diff --git a/libc/test/src/stdbit/stdc_trailing_zeros_us_test.cpp b/libc/test/src/stdbit/stdc_trailing_zeros_us_test.cpp
index a9f8327dfd91409..628364fc83acd38 100644
--- a/libc/test/src/stdbit/stdc_trailing_zeros_us_test.cpp
+++ b/libc/test/src/stdbit/stdc_trailing_zeros_us_test.cpp
@@ -17,5 +17,5 @@ TEST(LlvmLibcStdcTrailingZerosUsTest, Zero) {
TEST(LlvmLibcStdcTrailingZerosUsTest, OneHot) {
for (unsigned i = 0U; i != USHRT_WIDTH; ++i)
- EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_us(1U << i), i);
+ EXPECT_EQ(LIBC_NAMESPACE::stdc_trailing_zeros_us(static_cast<unsigned short>(1U << i)), i);
}
|
When cross compiling the libc-stdbit-tests, the existing tests trigger numerous instances of -Wimplicit-int-conversion. The truncation of these implicit promotions is intentional.
1107146
to
128a92d
Compare
lntue
approved these changes
Feb 11, 2025
Icohedron
pushed a commit
to Icohedron/llvm-project
that referenced
this pull request
Feb 11, 2025
When cross compiling the libc-stdbit-tests, the existing tests trigger numerous instances of -Wimplicit-int-conversion. The truncation of these implicit promotions is intentional.
flovent
pushed a commit
to flovent/llvm-project
that referenced
this pull request
Feb 13, 2025
When cross compiling the libc-stdbit-tests, the existing tests trigger numerous instances of -Wimplicit-int-conversion. The truncation of these implicit promotions is intentional.
joaosaffran
pushed a commit
to joaosaffran/llvm-project
that referenced
this pull request
Feb 14, 2025
When cross compiling the libc-stdbit-tests, the existing tests trigger numerous instances of -Wimplicit-int-conversion. The truncation of these implicit promotions is intentional.
sivan-shani
pushed a commit
to sivan-shani/llvm-project
that referenced
this pull request
Feb 24, 2025
When cross compiling the libc-stdbit-tests, the existing tests trigger numerous instances of -Wimplicit-int-conversion. The truncation of these implicit promotions is intentional.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When cross compiling the libc-stdbit-tests, the existing tests trigger numerous
instances of -Wimplicit-int-conversion. The truncation of these implicit
promotions is intentional.