From e7b71c031a5ecf518c48969ba85808bf5da9cc40 Mon Sep 17 00:00:00 2001 From: Ivana Ivanovska Date: Wed, 26 Nov 2025 15:58:39 +0100 Subject: [PATCH] Add a failing test for user-defined literals in macros (#6431) These types of literals are not supported at the moment, adding a `todo` test for it. Part of #6303 --- .../check/testdata/interop/cpp/macros.carbon | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/toolchain/check/testdata/interop/cpp/macros.carbon b/toolchain/check/testdata/interop/cpp/macros.carbon index d2069794bc17..04a7c9ca0740 100644 --- a/toolchain/check/testdata/interop/cpp/macros.carbon +++ b/toolchain/check/testdata/interop/cpp/macros.carbon @@ -608,6 +608,41 @@ fn F() { Cpp.foo(Cpp.MyNullPtr); } +// --- user_defined_literal.h +constexpr auto operator""_kb(unsigned long long k) -> unsigned long long { + return k * 1024; +} +#define M_1KB 1_kb + +// --- fail_todo_import_user_defined_literal.carbon + +library "[[@TEST_NAME]]"; + +// CHECK:STDERR: fail_todo_import_user_defined_literal.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] +// CHECK:STDERR: ./user_defined_literal.h:4:16: error: no matching literal operator for call to 'operator""_kb' with argument of type 'unsigned long long' or 'const char *', and no matching literal operator template [CppInteropParseError] +// CHECK:STDERR: 4 | #define M_1KB 1_kb +// CHECK:STDERR: | ^ +import Cpp library "user_defined_literal.h"; + +fn F() { + // CHECK:STDERR: fail_todo_import_user_defined_literal.carbon:[[@LINE+15]]:2: note: in `Cpp` name lookup for `M_1KB` [InCppNameLookup] + // CHECK:STDERR: Cpp.M_1KB; + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_import_user_defined_literal.carbon:[[@LINE+11]]:2: error: failed to parse macro Cpp.M_1KB to a valid constant expression [InCppMacroEvaluation] + // CHECK:STDERR: Cpp.M_1KB; + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: fail_todo_import_user_defined_literal.carbon:[[@LINE+8]]:2: note: in `Cpp` name lookup for `M_1KB` [InCppNameLookup] + // CHECK:STDERR: Cpp.M_1KB; + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_import_user_defined_literal.carbon:[[@LINE+4]]:2: error: member name `M_1KB` not found in `Cpp` [MemberNameNotFoundInInstScope] + // CHECK:STDERR: Cpp.M_1KB; + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: + Cpp.M_1KB; +} + // --- enums.carbon library "[[@TEST_NAME]]";