From 4c46233862a3ea3fd2c2d2a0da03abc7ec92f180 Mon Sep 17 00:00:00 2001 From: Neil Henderson Date: Wed, 17 Jan 2024 14:50:48 +1000 Subject: [PATCH 1/3] `assert_not_null` now verifies std::unique_ptr, std::shared_ptr, std::optional and std::expected in addition to the original null pointer check These states are considered to be "null" and will result in a violation error: - std::unique_ptr that owns nothing - std::shared_ptr with no managed object - std::optional with no value - std::expected containing an unexpected value --- include/cpp2util.h | 61 +++++++++++++++++-- .../pure2-assert-expected-not-null.cpp2 | 21 +++++++ .../pure2-assert-optional-not-null.cpp2 | 20 ++++++ .../pure2-assert-shared-ptr-not-null.cpp2 | 21 +++++++ .../pure2-assert-unique-ptr-not-null.cpp2 | 21 +++++++ ...re2-assert-expected-not-null.cpp.execution | 1 + .../pure2-assert-expected-not-null.cpp.output | 0 ...re2-assert-optional-not-null.cpp.execution | 1 + .../pure2-assert-optional-not-null.cpp.output | 0 ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...ure2-assert-shared-ptr-not-null.cpp.output | 0 ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...ure2-assert-unique-ptr-not-null.cpp.output | 0 ...re2-assert-expected-not-null.cpp.execution | 1 + .../pure2-assert-expected-not-null.cpp.output | 0 ...re2-assert-optional-not-null.cpp.execution | 1 + .../pure2-assert-optional-not-null.cpp.output | 0 ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...ure2-assert-shared-ptr-not-null.cpp.output | 0 ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...ure2-assert-unique-ptr-not-null.cpp.output | 0 ...re2-assert-expected-not-null.cpp.execution | 1 + .../pure2-assert-expected-not-null.cpp.output | 0 ...re2-assert-optional-not-null.cpp.execution | 1 + .../pure2-assert-optional-not-null.cpp.output | 0 ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...ure2-assert-shared-ptr-not-null.cpp.output | 0 ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...ure2-assert-unique-ptr-not-null.cpp.output | 0 ...re2-assert-expected-not-null.cpp.execution | 1 + .../pure2-assert-expected-not-null.cpp.output | 0 ...re2-assert-optional-not-null.cpp.execution | 1 + .../pure2-assert-optional-not-null.cpp.output | 0 ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...ure2-assert-shared-ptr-not-null.cpp.output | 0 ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...ure2-assert-unique-ptr-not-null.cpp.output | 0 ...re2-assert-expected-not-null.cpp.execution | 1 + .../pure2-assert-expected-not-null.cpp.output | 1 + ...re2-assert-optional-not-null.cpp.execution | 1 + .../pure2-assert-optional-not-null.cpp.output | 1 + ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...ure2-assert-shared-ptr-not-null.cpp.output | 1 + ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...ure2-assert-unique-ptr-not-null.cpp.output | 1 + .../pure2-assert-expected-not-null.cpp | 52 ++++++++++++++++ ...pure2-assert-expected-not-null.cpp2.output | 2 + .../pure2-assert-optional-not-null.cpp | 51 ++++++++++++++++ ...pure2-assert-optional-not-null.cpp2.output | 2 + .../pure2-assert-shared-ptr-not-null.cpp | 52 ++++++++++++++++ ...re2-assert-shared-ptr-not-null.cpp2.output | 2 + .../pure2-assert-unique-ptr-not-null.cpp | 52 ++++++++++++++++ ...re2-assert-unique-ptr-not-null.cpp2.output | 2 + 53 files changed, 378 insertions(+), 5 deletions(-) create mode 100644 regression-tests/pure2-assert-expected-not-null.cpp2 create mode 100644 regression-tests/pure2-assert-optional-not-null.cpp2 create mode 100644 regression-tests/pure2-assert-shared-ptr-not-null.cpp2 create mode 100644 regression-tests/pure2-assert-unique-ptr-not-null.cpp2 create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.output create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution create mode 100644 regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output create mode 100644 regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution create mode 100644 regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.output create mode 100644 regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.execution create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.output create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.execution create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.output create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.execution create mode 100644 regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.output create mode 100644 regression-tests/test-results/pure2-assert-expected-not-null.cpp create mode 100644 regression-tests/test-results/pure2-assert-expected-not-null.cpp2.output create mode 100644 regression-tests/test-results/pure2-assert-optional-not-null.cpp create mode 100644 regression-tests/test-results/pure2-assert-optional-not-null.cpp2.output create mode 100644 regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp create mode 100644 regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp2.output create mode 100644 regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp create mode 100644 regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp2.output diff --git a/include/cpp2util.h b/include/cpp2util.h index bf942b1594..b1f90c5e46 100644 --- a/include/cpp2util.h +++ b/include/cpp2util.h @@ -240,6 +240,9 @@ #ifndef CPP2_NO_EXCEPTIONS #include #endif + #ifdef __cpp_lib_expected + #include + #endif #if defined(__cpp_lib_format) || (defined(_MSC_VER) && _MSC_VER >= 1929) #include #endif @@ -451,19 +454,67 @@ auto inline Testing = contract_group( ); -// Null pointer deref checking +// Check for invalid dereference or indirection which would result in undefined behavior. +// +// - Null pointer +// - std::unique_ptr that owns nothing +// - std::shared_ptr with no managed object +// - std::optional with no value +// - std::expected containing an unexpected value +// +// Note: For naming simplicity we consider all the above cases to be "null" states so that +// we can write: `*assert_not_null(object)`. // -auto assert_not_null(auto&& p CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) -> decltype(auto) +template +concept UniquePtr = std::is_same_v>; + +template +concept SharedPtr = std::is_same_v>; + +template +concept Optional = std::is_same_v>; + +#ifdef __cpp_lib_expected + +template +concept Expected = std::is_same_v>; + +#endif + +auto assert_not_null(auto&& arg CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) -> decltype(auto) { // NOTE: This "!= T{}" test may or may not work for STL iterators. The standard // doesn't guarantee that using == and != will reliably report whether an // STL iterator has the default-constructed value. So use it only for raw *... - if constexpr (std::is_pointer_v) { - if (p == CPP2_TYPEOF(p){}) { + if constexpr (std::is_pointer_v) { + if (arg == CPP2_TYPEOF(arg){}) { Null.report_violation("dynamic null dereference attempt detected" CPP2_SOURCE_LOCATION_ARG); }; } - return CPP2_FORWARD(p); + else if constexpr (UniquePtr) { + if (!arg) { + Null.report_violation("std::unique_ptr is empty" CPP2_SOURCE_LOCATION_ARG); + } + } + else if constexpr (SharedPtr) { + if (!arg) { + Null.report_violation("std::shared_ptr is empty" CPP2_SOURCE_LOCATION_ARG); + } + } + else if constexpr (Optional) { + if (!arg.has_value()) { + Null.report_violation("std::optional does not contain a value" CPP2_SOURCE_LOCATION_ARG); + } + } +#ifdef __cpp_lib_expected + else if constexpr (Expected) { + if (!arg.has_value()) { + Null.report_violation("std::expected has an unexpected value" CPP2_SOURCE_LOCATION_ARG); + } + } +#endif + + return CPP2_FORWARD(arg); } // Subscript bounds checking diff --git a/regression-tests/pure2-assert-expected-not-null.cpp2 b/regression-tests/pure2-assert-expected-not-null.cpp2 new file mode 100644 index 0000000000..4d3fc6338f --- /dev/null +++ b/regression-tests/pure2-assert-expected-not-null.cpp2 @@ -0,0 +1,21 @@ + +fine: () -> int = +{ + up:= unique.new(1); + sp:= shared.new(2); + op: std::optional = (3); + ex: std::expected = (4); + + return up* + sp* + op* + ex*; +} + +bad_expected_access: () -> int = +{ + ex: std::expected = std::unexpected(false); + return ex*; +} + +main: () -> int = +{ + return fine() + bad_expected_access(); +} \ No newline at end of file diff --git a/regression-tests/pure2-assert-optional-not-null.cpp2 b/regression-tests/pure2-assert-optional-not-null.cpp2 new file mode 100644 index 0000000000..89e4ee7b83 --- /dev/null +++ b/regression-tests/pure2-assert-optional-not-null.cpp2 @@ -0,0 +1,20 @@ + +fine: () -> int = +{ + up:= unique.new(1); + sp:= shared.new(2); + op: std::optional = (3); + + return up* + sp* + op*; +} + +bad_optional_access: () -> int = +{ + op: std::optional = std::nullopt; + return op*; +} + +main: () -> int = +{ + return fine() + bad_optional_access(); +} \ No newline at end of file diff --git a/regression-tests/pure2-assert-shared-ptr-not-null.cpp2 b/regression-tests/pure2-assert-shared-ptr-not-null.cpp2 new file mode 100644 index 0000000000..09f07fa5f3 --- /dev/null +++ b/regression-tests/pure2-assert-shared-ptr-not-null.cpp2 @@ -0,0 +1,21 @@ + +fine: () -> int = +{ + up:= unique.new(1); + sp:= shared.new(2); + op: std::optional = (3); + + return up* + sp* + op*; +} + +bad_shared_ptr_access: () -> int = +{ + sp:= std::make_shared(1); + sp.reset(); + return sp*; +} + +main: () -> int = +{ + return fine() + bad_shared_ptr_access(); +} \ No newline at end of file diff --git a/regression-tests/pure2-assert-unique-ptr-not-null.cpp2 b/regression-tests/pure2-assert-unique-ptr-not-null.cpp2 new file mode 100644 index 0000000000..bcd9c02a75 --- /dev/null +++ b/regression-tests/pure2-assert-unique-ptr-not-null.cpp2 @@ -0,0 +1,21 @@ + +fine: () -> int = +{ + up:= unique.new(1); + sp:= shared.new(2); + op: std::optional = (3); + + return up* + sp* + op*; +} + +bad_unique_ptr_access: () -> int = +{ + up:= std::make_unique(1); + up.reset(); + return up*; +} + +main: () -> int = +{ + return fine() + bad_unique_ptr_access(); +} \ No newline at end of file diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution new file mode 100644 index 0000000000..8887aa1aa4 --- /dev/null +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution new file mode 100644 index 0000000000..c6aeba0fde --- /dev/null +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::optional does not contain a value diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.output b/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..85aafbe6a1 --- /dev/null +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::shared_ptr is empty diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.output b/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..af633d171a --- /dev/null +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::unique_ptr is empty diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.output b/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution new file mode 100644 index 0000000000..8887aa1aa4 --- /dev/null +++ b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution new file mode 100644 index 0000000000..c6aeba0fde --- /dev/null +++ b/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::optional does not contain a value diff --git a/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.output b/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..85aafbe6a1 --- /dev/null +++ b/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::shared_ptr is empty diff --git a/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.output b/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..af633d171a --- /dev/null +++ b/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::unique_ptr is empty diff --git a/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.output b/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution new file mode 100644 index 0000000000..8887aa1aa4 --- /dev/null +++ b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution new file mode 100644 index 0000000000..c6aeba0fde --- /dev/null +++ b/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::optional does not contain a value diff --git a/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.output b/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..85aafbe6a1 --- /dev/null +++ b/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::shared_ptr is empty diff --git a/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.output b/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..af633d171a --- /dev/null +++ b/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::unique_ptr is empty diff --git a/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.output b/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution new file mode 100644 index 0000000000..8887aa1aa4 --- /dev/null +++ b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution new file mode 100644 index 0000000000..c6aeba0fde --- /dev/null +++ b/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::optional does not contain a value diff --git a/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.output b/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..85aafbe6a1 --- /dev/null +++ b/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::shared_ptr is empty diff --git a/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.output b/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..af633d171a --- /dev/null +++ b/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::unique_ptr is empty diff --git a/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.output b/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.output new file mode 100644 index 0000000000..e69de29bb2 diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.execution new file mode 100644 index 0000000000..8887aa1aa4 --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.output new file mode 100644 index 0000000000..885335f216 --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-expected-not-null.cpp.output @@ -0,0 +1 @@ +pure2-assert-expected-not-null.cpp diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.execution new file mode 100644 index 0000000000..c6aeba0fde --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::optional does not contain a value diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.output b/regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.output new file mode 100644 index 0000000000..ac5c880cdb --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-optional-not-null.cpp.output @@ -0,0 +1 @@ +pure2-assert-optional-not-null.cpp diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..85aafbe6a1 --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::shared_ptr is empty diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.output b/regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.output new file mode 100644 index 0000000000..28a635c28e --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-shared-ptr-not-null.cpp.output @@ -0,0 +1 @@ +pure2-assert-shared-ptr-not-null.cpp diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.execution new file mode 100644 index 0000000000..af633d171a --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.execution @@ -0,0 +1 @@ +Null safety violation: std::unique_ptr is empty diff --git a/regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.output b/regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.output new file mode 100644 index 0000000000..7d1d60b4e6 --- /dev/null +++ b/regression-tests/test-results/msvc-2022/pure2-assert-unique-ptr-not-null.cpp.output @@ -0,0 +1 @@ +pure2-assert-unique-ptr-not-null.cpp diff --git a/regression-tests/test-results/pure2-assert-expected-not-null.cpp b/regression-tests/test-results/pure2-assert-expected-not-null.cpp new file mode 100644 index 0000000000..4cff5ad27e --- /dev/null +++ b/regression-tests/test-results/pure2-assert-expected-not-null.cpp @@ -0,0 +1,52 @@ + +#define CPP2_IMPORT_STD Yes + +//=== Cpp2 type declarations ==================================================== + + +#include "cpp2util.h" + +#line 1 "pure2-assert-expected-not-null.cpp2" + + +//=== Cpp2 type definitions and function declarations =========================== + +#line 1 "pure2-assert-expected-not-null.cpp2" + +#line 2 "pure2-assert-expected-not-null.cpp2" +[[nodiscard]] auto fine() -> int; + +#line 12 "pure2-assert-expected-not-null.cpp2" +[[nodiscard]] auto bad_expected_access() -> int; + +#line 18 "pure2-assert-expected-not-null.cpp2" +[[nodiscard]] auto main() -> int; + +//=== Cpp2 function definitions ================================================= + +#line 1 "pure2-assert-expected-not-null.cpp2" + +#line 2 "pure2-assert-expected-not-null.cpp2" +[[nodiscard]] auto fine() -> int +{ + auto up {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::unique, 1)}; + auto sp {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::shared, 2)}; + std::optional op {3}; + std::expected ex {4}; + + return *cpp2::assert_not_null(std::move(up)) + *cpp2::assert_not_null(std::move(sp)) + *cpp2::assert_not_null(std::move(op)) + *cpp2::assert_not_null(std::move(ex)); +} + +#line 12 "pure2-assert-expected-not-null.cpp2" +[[nodiscard]] auto bad_expected_access() -> int +{ + std::expected ex {std::unexpected(false)}; + return *cpp2::assert_not_null(std::move(ex)); +} + +#line 18 "pure2-assert-expected-not-null.cpp2" +[[nodiscard]] auto main() -> int +{ + return fine() + bad_expected_access(); +} + diff --git a/regression-tests/test-results/pure2-assert-expected-not-null.cpp2.output b/regression-tests/test-results/pure2-assert-expected-not-null.cpp2.output new file mode 100644 index 0000000000..36d2cfe5bc --- /dev/null +++ b/regression-tests/test-results/pure2-assert-expected-not-null.cpp2.output @@ -0,0 +1,2 @@ +pure2-assert-expected-not-null.cpp2... ok (all Cpp2, passes safety checks) + diff --git a/regression-tests/test-results/pure2-assert-optional-not-null.cpp b/regression-tests/test-results/pure2-assert-optional-not-null.cpp new file mode 100644 index 0000000000..3b208f3858 --- /dev/null +++ b/regression-tests/test-results/pure2-assert-optional-not-null.cpp @@ -0,0 +1,51 @@ + +#define CPP2_IMPORT_STD Yes + +//=== Cpp2 type declarations ==================================================== + + +#include "cpp2util.h" + +#line 1 "pure2-assert-optional-not-null.cpp2" + + +//=== Cpp2 type definitions and function declarations =========================== + +#line 1 "pure2-assert-optional-not-null.cpp2" + +#line 2 "pure2-assert-optional-not-null.cpp2" +[[nodiscard]] auto fine() -> int; + +#line 11 "pure2-assert-optional-not-null.cpp2" +[[nodiscard]] auto bad_optional_access() -> int; + +#line 17 "pure2-assert-optional-not-null.cpp2" +[[nodiscard]] auto main() -> int; + +//=== Cpp2 function definitions ================================================= + +#line 1 "pure2-assert-optional-not-null.cpp2" + +#line 2 "pure2-assert-optional-not-null.cpp2" +[[nodiscard]] auto fine() -> int +{ + auto up {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::unique, 1)}; + auto sp {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::shared, 2)}; + std::optional op {3}; + + return *cpp2::assert_not_null(std::move(up)) + *cpp2::assert_not_null(std::move(sp)) + *cpp2::assert_not_null(std::move(op)); +} + +#line 11 "pure2-assert-optional-not-null.cpp2" +[[nodiscard]] auto bad_optional_access() -> int +{ + std::optional op {std::nullopt}; + return *cpp2::assert_not_null(std::move(op)); +} + +#line 17 "pure2-assert-optional-not-null.cpp2" +[[nodiscard]] auto main() -> int +{ + return fine() + bad_optional_access(); +} + diff --git a/regression-tests/test-results/pure2-assert-optional-not-null.cpp2.output b/regression-tests/test-results/pure2-assert-optional-not-null.cpp2.output new file mode 100644 index 0000000000..dfa7158714 --- /dev/null +++ b/regression-tests/test-results/pure2-assert-optional-not-null.cpp2.output @@ -0,0 +1,2 @@ +pure2-assert-optional-not-null.cpp2... ok (all Cpp2, passes safety checks) + diff --git a/regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp b/regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp new file mode 100644 index 0000000000..4015674373 --- /dev/null +++ b/regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp @@ -0,0 +1,52 @@ + +#define CPP2_IMPORT_STD Yes + +//=== Cpp2 type declarations ==================================================== + + +#include "cpp2util.h" + +#line 1 "pure2-assert-shared-ptr-not-null.cpp2" + + +//=== Cpp2 type definitions and function declarations =========================== + +#line 1 "pure2-assert-shared-ptr-not-null.cpp2" + +#line 2 "pure2-assert-shared-ptr-not-null.cpp2" +[[nodiscard]] auto fine() -> int; + +#line 11 "pure2-assert-shared-ptr-not-null.cpp2" +[[nodiscard]] auto bad_shared_ptr_access() -> int; + +#line 18 "pure2-assert-shared-ptr-not-null.cpp2" +[[nodiscard]] auto main() -> int; + +//=== Cpp2 function definitions ================================================= + +#line 1 "pure2-assert-shared-ptr-not-null.cpp2" + +#line 2 "pure2-assert-shared-ptr-not-null.cpp2" +[[nodiscard]] auto fine() -> int +{ + auto up {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::unique, 1)}; + auto sp {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::shared, 2)}; + std::optional op {3}; + + return *cpp2::assert_not_null(std::move(up)) + *cpp2::assert_not_null(std::move(sp)) + *cpp2::assert_not_null(std::move(op)); +} + +#line 11 "pure2-assert-shared-ptr-not-null.cpp2" +[[nodiscard]] auto bad_shared_ptr_access() -> int +{ + auto sp {std::make_shared(1)}; + CPP2_UFCS(reset)(sp); + return *cpp2::assert_not_null(std::move(sp)); +} + +#line 18 "pure2-assert-shared-ptr-not-null.cpp2" +[[nodiscard]] auto main() -> int +{ + return fine() + bad_shared_ptr_access(); +} + diff --git a/regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp2.output b/regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp2.output new file mode 100644 index 0000000000..1afa39cba1 --- /dev/null +++ b/regression-tests/test-results/pure2-assert-shared-ptr-not-null.cpp2.output @@ -0,0 +1,2 @@ +pure2-assert-shared-ptr-not-null.cpp2... ok (all Cpp2, passes safety checks) + diff --git a/regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp b/regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp new file mode 100644 index 0000000000..bee72adba5 --- /dev/null +++ b/regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp @@ -0,0 +1,52 @@ + +#define CPP2_IMPORT_STD Yes + +//=== Cpp2 type declarations ==================================================== + + +#include "cpp2util.h" + +#line 1 "pure2-assert-unique-ptr-not-null.cpp2" + + +//=== Cpp2 type definitions and function declarations =========================== + +#line 1 "pure2-assert-unique-ptr-not-null.cpp2" + +#line 2 "pure2-assert-unique-ptr-not-null.cpp2" +[[nodiscard]] auto fine() -> int; + +#line 11 "pure2-assert-unique-ptr-not-null.cpp2" +[[nodiscard]] auto bad_unique_ptr_access() -> int; + +#line 18 "pure2-assert-unique-ptr-not-null.cpp2" +[[nodiscard]] auto main() -> int; + +//=== Cpp2 function definitions ================================================= + +#line 1 "pure2-assert-unique-ptr-not-null.cpp2" + +#line 2 "pure2-assert-unique-ptr-not-null.cpp2" +[[nodiscard]] auto fine() -> int +{ + auto up {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::unique, 1)}; + auto sp {CPP2_UFCS_TEMPLATE(cpp2_new)(cpp2::shared, 2)}; + std::optional op {3}; + + return *cpp2::assert_not_null(std::move(up)) + *cpp2::assert_not_null(std::move(sp)) + *cpp2::assert_not_null(std::move(op)); +} + +#line 11 "pure2-assert-unique-ptr-not-null.cpp2" +[[nodiscard]] auto bad_unique_ptr_access() -> int +{ + auto up {std::make_unique(1)}; + CPP2_UFCS(reset)(up); + return *cpp2::assert_not_null(std::move(up)); +} + +#line 18 "pure2-assert-unique-ptr-not-null.cpp2" +[[nodiscard]] auto main() -> int +{ + return fine() + bad_unique_ptr_access(); +} + diff --git a/regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp2.output b/regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp2.output new file mode 100644 index 0000000000..b7cd96de11 --- /dev/null +++ b/regression-tests/test-results/pure2-assert-unique-ptr-not-null.cpp2.output @@ -0,0 +1,2 @@ +pure2-assert-unique-ptr-not-null.cpp2... ok (all Cpp2, passes safety checks) + From e5357f246b5dbc0c7ceb0248ca7ee45502770e4a Mon Sep 17 00:00:00 2001 From: Neil Henderson Date: Wed, 17 Jan 2024 15:18:55 +1000 Subject: [PATCH 2/3] Update test-results for clang & gcc --- ...re2-assert-expected-not-null.cpp.execution | 1 - .../pure2-assert-expected-not-null.cpp.output | 19 +++++++++++++ ...re2-assert-optional-not-null.cpp.execution | 1 + ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...re2-assert-expected-not-null.cpp.execution | 1 - .../pure2-assert-expected-not-null.cpp.output | 27 +++++++++++++++++++ ...re2-assert-optional-not-null.cpp.execution | 1 + ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...2-assert-unique-ptr-not-null.cpp.execution | 1 + .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 4 +-- .../pure2-bugfix-for-ufcs-sfinae.cpp.output | 8 +++--- ...re2-assert-expected-not-null.cpp.execution | 1 - .../pure2-assert-expected-not-null.cpp.output | 8 ++++++ ...re2-assert-optional-not-null.cpp.execution | 1 + ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...2-assert-unique-ptr-not-null.cpp.execution | 1 + ...re2-assert-expected-not-null.cpp.execution | 1 - .../pure2-assert-expected-not-null.cpp.output | 10 +++++++ ...re2-assert-optional-not-null.cpp.execution | 1 + ...2-assert-shared-ptr-not-null.cpp.execution | 1 + ...2-assert-unique-ptr-not-null.cpp.execution | 1 + 22 files changed, 82 insertions(+), 10 deletions(-) diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution index 8887aa1aa4..e69de29bb2 100644 --- a/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.execution @@ -1 +0,0 @@ -Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output index e69de29bb2..e59b18c0db 100644 --- a/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-expected-not-null.cpp.output @@ -0,0 +1,19 @@ +pure2-assert-expected-not-null.cpp2:7:10: error: no member named 'expected' in namespace 'std' + std::expected ex {4}; + ~~~~~^ +pure2-assert-expected-not-null.cpp2:7:22: error: expected '(' for function-style cast or type construction + std::expected ex {4}; + ~~~^ +pure2-assert-expected-not-null.cpp2:9:165: error: use of undeclared identifier 'ex' + return *cpp2::assert_not_null(std::move(up)) + *cpp2::assert_not_null(std::move(sp)) + *cpp2::assert_not_null(std::move(op)) + *cpp2::assert_not_null(std::move(ex)); + ^ +pure2-assert-expected-not-null.cpp2:14:10: error: no member named 'expected' in namespace 'std' + std::expected ex {std::unexpected(false)}; + ~~~~~^ +pure2-assert-expected-not-null.cpp2:14:22: error: expected '(' for function-style cast or type construction + std::expected ex {std::unexpected(false)}; + ~~~^ +pure2-assert-expected-not-null.cpp2:15:45: error: use of undeclared identifier 'ex' + return *cpp2::assert_not_null(std::move(ex)); + ^ +6 errors generated. diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution index c6aeba0fde..4ba4a931cf 100644 --- a/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-optional-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::optional does not contain a value +libc++abi: terminating diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution index 85aafbe6a1..a5f98ba5c6 100644 --- a/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-shared-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::shared_ptr is empty +libc++abi: terminating diff --git a/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution index af633d171a..6af91188a9 100644 --- a/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/apple-clang-14/pure2-assert-unique-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::unique_ptr is empty +libc++abi: terminating diff --git a/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution index 8887aa1aa4..e69de29bb2 100644 --- a/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution +++ b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.execution @@ -1 +0,0 @@ -Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output index e69de29bb2..aa8dfd7017 100644 --- a/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output +++ b/regression-tests/test-results/clang-12/pure2-assert-expected-not-null.cpp.output @@ -0,0 +1,27 @@ +pure2-assert-expected-not-null.cpp2:7:22: error: expected '(' for function-style cast or type construction + std::expected ex {4}; + ~~~^ +pure2-assert-expected-not-null.cpp2:7:10: error: no member named 'expected' in namespace 'std'; did you mean 'unexpected'? + std::expected ex {4}; + ~~~~~^~~~~~~~ + unexpected +/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/exception:92:8: note: 'unexpected' declared here + void unexpected() __attribute__ ((__noreturn__)); + ^ +pure2-assert-expected-not-null.cpp2:9:165: error: use of undeclared identifier 'ex' + return *cpp2::assert_not_null(std::move(up)) + *cpp2::assert_not_null(std::move(sp)) + *cpp2::assert_not_null(std::move(op)) + *cpp2::assert_not_null(std::move(ex)); + ^ +pure2-assert-expected-not-null.cpp2:14:22: error: expected '(' for function-style cast or type construction + std::expected ex {std::unexpected(false)}; + ~~~^ +pure2-assert-expected-not-null.cpp2:14:10: error: no member named 'expected' in namespace 'std'; did you mean 'unexpected'? + std::expected ex {std::unexpected(false)}; + ~~~~~^~~~~~~~ + unexpected +/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/exception:92:8: note: 'unexpected' declared here + void unexpected() __attribute__ ((__noreturn__)); + ^ +pure2-assert-expected-not-null.cpp2:15:45: error: use of undeclared identifier 'ex' + return *cpp2::assert_not_null(std::move(ex)); + ^ +6 errors generated. diff --git a/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution index c6aeba0fde..33fb4a6abe 100644 --- a/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution +++ b/regression-tests/test-results/clang-12/pure2-assert-optional-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::optional does not contain a value +terminate called without an active exception diff --git a/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution index 85aafbe6a1..42d0a63fd5 100644 --- a/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/clang-12/pure2-assert-shared-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::shared_ptr is empty +terminate called without an active exception diff --git a/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution index af633d171a..8a0eb01a56 100644 --- a/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/clang-12/pure2-assert-unique-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::unique_ptr is empty +terminate called without an active exception diff --git a/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-noexcept.cpp.output b/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-noexcept.cpp.output index f9618585bb..6d2da05b14 100644 --- a/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-noexcept.cpp.output +++ b/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-noexcept.cpp.output @@ -1,10 +1,10 @@ pure2-bugfix-for-ufcs-noexcept.cpp2:5:26: error: lambda expression in an unevaluated operand static_assert(noexcept(CPP2_UFCS(swap)(t(), t())));// Fails on Clang 12 (lambda in unevaluated context) and GCC 10 (static assertion failed) ^ -../../../include/cpp2util.h:882:59: note: expanded from macro 'CPP2_UFCS' +../../../include/cpp2util.h:933:59: note: expanded from macro 'CPP2_UFCS' #define CPP2_UFCS(...) CPP2_UFCS_(&,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ 1 error generated. diff --git a/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-sfinae.cpp.output b/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-sfinae.cpp.output index 45b3d56f67..d42734e3e3 100644 --- a/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-sfinae.cpp.output +++ b/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-sfinae.cpp.output @@ -1,19 +1,19 @@ pure2-bugfix-for-ufcs-sfinae.cpp2:1:78: error: lambda expression in an unevaluated operand template [[nodiscard]] auto f() -> std::type_identity_t; ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ pure2-bugfix-for-ufcs-sfinae.cpp2:1:78: error: lambda expression in an unevaluated operand template [[nodiscard]] auto f() -> std::type_identity_t{}// Fails on Clang 12 (lambda in unevaluated context). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ 2 errors generated. diff --git a/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution index 8887aa1aa4..e69de29bb2 100644 --- a/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.execution @@ -1 +0,0 @@ -Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output index e69de29bb2..4c1efa31c1 100644 --- a/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output +++ b/regression-tests/test-results/gcc-10/pure2-assert-expected-not-null.cpp.output @@ -0,0 +1,8 @@ +pure2-assert-expected-not-null.cpp2: In function ‘int fine()’: +pure2-assert-expected-not-null.cpp2:7:10: error: ‘expected’ is not a member of ‘std’; did you mean ‘unexpected’? +pure2-assert-expected-not-null.cpp2:7:19: error: expected primary-expression before ‘int’ +pure2-assert-expected-not-null.cpp2:9:165: error: ‘ex’ was not declared in this scope; did you mean ‘exp’? +pure2-assert-expected-not-null.cpp2: In function ‘int bad_expected_access()’: +pure2-assert-expected-not-null.cpp2:14:10: error: ‘expected’ is not a member of ‘std’; did you mean ‘unexpected’? +pure2-assert-expected-not-null.cpp2:14:19: error: expected primary-expression before ‘int’ +pure2-assert-expected-not-null.cpp2:15:45: error: ‘ex’ was not declared in this scope; did you mean ‘exp’? diff --git a/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution index c6aeba0fde..33fb4a6abe 100644 --- a/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-10/pure2-assert-optional-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::optional does not contain a value +terminate called without an active exception diff --git a/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution index 85aafbe6a1..42d0a63fd5 100644 --- a/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-10/pure2-assert-shared-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::shared_ptr is empty +terminate called without an active exception diff --git a/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution index af633d171a..8a0eb01a56 100644 --- a/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-10/pure2-assert-unique-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::unique_ptr is empty +terminate called without an active exception diff --git a/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution index 8887aa1aa4..e69de29bb2 100644 --- a/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.execution @@ -1 +0,0 @@ -Null safety violation: std::expected has an unexpected value diff --git a/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output index e69de29bb2..eb584ca32b 100644 --- a/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output +++ b/regression-tests/test-results/gcc-13/pure2-assert-expected-not-null.cpp.output @@ -0,0 +1,10 @@ +pure2-assert-expected-not-null.cpp2: In function ‘int fine()’: +pure2-assert-expected-not-null.cpp2:7:10: error: ‘expected’ is not a member of ‘std’ +pure2-assert-expected-not-null.cpp2:7:10: note: ‘std::expected’ is only available from C++23 onwards +pure2-assert-expected-not-null.cpp2:7:19: error: expected primary-expression before ‘int’ +pure2-assert-expected-not-null.cpp2:9:165: error: ‘ex’ was not declared in this scope; did you mean ‘exp’? +pure2-assert-expected-not-null.cpp2: In function ‘int bad_expected_access()’: +pure2-assert-expected-not-null.cpp2:14:10: error: ‘expected’ is not a member of ‘std’ +pure2-assert-expected-not-null.cpp2:14:10: note: ‘std::expected’ is only available from C++23 onwards +pure2-assert-expected-not-null.cpp2:14:19: error: expected primary-expression before ‘int’ +pure2-assert-expected-not-null.cpp2:15:45: error: ‘ex’ was not declared in this scope; did you mean ‘exp’? diff --git a/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution index c6aeba0fde..33fb4a6abe 100644 --- a/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-13/pure2-assert-optional-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::optional does not contain a value +terminate called without an active exception diff --git a/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution index 85aafbe6a1..42d0a63fd5 100644 --- a/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-13/pure2-assert-shared-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::shared_ptr is empty +terminate called without an active exception diff --git a/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution b/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution index af633d171a..8a0eb01a56 100644 --- a/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution +++ b/regression-tests/test-results/gcc-13/pure2-assert-unique-ptr-not-null.cpp.execution @@ -1 +1,2 @@ Null safety violation: std::unique_ptr is empty +terminate called without an active exception From 9bc912dbc9690301298fa392979395aeb2ed02d3 Mon Sep 17 00:00:00 2001 From: Neil Henderson Date: Wed, 17 Jan 2024 15:26:51 +1000 Subject: [PATCH 3/3] Update some more clang & gcc test results --- ...mixed-bugfix-for-ufcs-non-local.cpp.output | 52 +++++++++---------- ...mixed-bugfix-for-ufcs-non-local.cpp.output | 40 +++++++------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/regression-tests/test-results/clang-12/mixed-bugfix-for-ufcs-non-local.cpp.output b/regression-tests/test-results/clang-12/mixed-bugfix-for-ufcs-non-local.cpp.output index 62497e89dd..63582f5f65 100644 --- a/regression-tests/test-results/clang-12/mixed-bugfix-for-ufcs-non-local.cpp.output +++ b/regression-tests/test-results/clang-12/mixed-bugfix-for-ufcs-non-local.cpp.output @@ -1,118 +1,118 @@ mixed-bugfix-for-ufcs-non-local.cpp2:13:12: error: a lambda expression cannot appear in this context template UnnamedTypeParam1_1> bool inline constexpr v0 = false;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context) ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:15:3: error: a lambda expression cannot appear in this context t inline constexpr v1 = t();// Fails on Clang 12 (lambda in unevaluated context). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:21:12: error: a lambda expression cannot appear in this context template UnnamedTypeParam1_2> auto g() -> void; ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:23:36: error: a lambda expression cannot appear in this context auto g([[maybe_unused]] cpp2::in> unnamed_param_1) -> void; ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:27:29: error: a lambda expression cannot appear in this context [[nodiscard]] auto h() -> t; ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:31:12: error: a lambda expression cannot appear in this context template UnnamedTypeParam1_3> using a = bool;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context) ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:33:12: error: a lambda expression cannot appear in this context template UnnamedTypeParam1_4> auto inline constexpr b = false;// Fails on GCC ([GCC109781][]). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:35:13: error: a lambda expression cannot appear in this context using c = t;// Fails on Clang 12 (lambda in unevaluated context) and Clang 12 (a lambda expression cannot appear in this context) ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:37:29: error: a lambda expression cannot appear in this context auto inline constexpr d = t();// Fails on Clang 12 (lambda in unevaluated context). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:21:12: error: a lambda expression cannot appear in this context template UnnamedTypeParam1_2> auto g() -> void{}// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context) ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:23:36: error: a lambda expression cannot appear in this context auto g([[maybe_unused]] cpp2::in> unnamed_param_1) -> void{}// Fails on Clang 12 (lambda in unevaluated context). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:27:29: error: a lambda expression cannot appear in this context [[nodiscard]] auto h() -> t { return o; }// Fails on Clang 12 (lambda in unevaluated context). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ mixed-bugfix-for-ufcs-non-local.cpp2:41:79: error: lambda expression in an unevaluated operand inline CPP2_CONSTEXPR bool u::c = [](cpp2::in> x) mutable -> auto { return x; }(true);// Fails on Clang 12 (lambda in unevaluated context). ^ -../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' +../../../include/cpp2util.h:936:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL' #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) ^ -../../../include/cpp2util.h:866:53: note: expanded from macro 'CPP2_UFCS_' +../../../include/cpp2util.h:917:53: note: expanded from macro 'CPP2_UFCS_' #define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ ^ 13 errors generated. diff --git a/regression-tests/test-results/gcc-13/mixed-bugfix-for-ufcs-non-local.cpp.output b/regression-tests/test-results/gcc-13/mixed-bugfix-for-ufcs-non-local.cpp.output index f8e6cad175..6d7abc5d0e 100644 --- a/regression-tests/test-results/gcc-13/mixed-bugfix-for-ufcs-non-local.cpp.output +++ b/regression-tests/test-results/gcc-13/mixed-bugfix-for-ufcs-non-local.cpp.output @@ -1,41 +1,41 @@ In file included from mixed-bugfix-for-ufcs-non-local.cpp:6: -../../../include/cpp2util.h:867:1: error: lambda-expression in template parameter type - 867 | [LAMBDADEFCAPT]< \ +../../../include/cpp2util.h:918:1: error: lambda-expression in template parameter type + 918 | [LAMBDADEFCAPT]< \ | ^ -../../../include/cpp2util.h:885:59: note: in expansion of macro ‘CPP2_UFCS_’ - 885 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) +../../../include/cpp2util.h:936:59: note: in expansion of macro ‘CPP2_UFCS_’ + 936 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) | ^~~~~~~~~~ mixed-bugfix-for-ufcs-non-local.cpp2:13:12: note: in expansion of macro ‘CPP2_UFCS_NONLOCAL’ mixed-bugfix-for-ufcs-non-local.cpp2:13:36: error: template argument 1 is invalid -../../../include/cpp2util.h:867:1: error: lambda-expression in template parameter type - 867 | [LAMBDADEFCAPT]< \ +../../../include/cpp2util.h:918:1: error: lambda-expression in template parameter type + 918 | [LAMBDADEFCAPT]< \ | ^ -../../../include/cpp2util.h:885:59: note: in expansion of macro ‘CPP2_UFCS_’ - 885 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) +../../../include/cpp2util.h:936:59: note: in expansion of macro ‘CPP2_UFCS_’ + 936 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) | ^~~~~~~~~~ mixed-bugfix-for-ufcs-non-local.cpp2:21:12: note: in expansion of macro ‘CPP2_UFCS_NONLOCAL’ mixed-bugfix-for-ufcs-non-local.cpp2:21:36: error: template argument 1 is invalid -../../../include/cpp2util.h:867:1: error: lambda-expression in template parameter type - 867 | [LAMBDADEFCAPT]< \ +../../../include/cpp2util.h:918:1: error: lambda-expression in template parameter type + 918 | [LAMBDADEFCAPT]< \ | ^ -../../../include/cpp2util.h:885:59: note: in expansion of macro ‘CPP2_UFCS_’ - 885 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) +../../../include/cpp2util.h:936:59: note: in expansion of macro ‘CPP2_UFCS_’ + 936 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) | ^~~~~~~~~~ mixed-bugfix-for-ufcs-non-local.cpp2:31:12: note: in expansion of macro ‘CPP2_UFCS_NONLOCAL’ mixed-bugfix-for-ufcs-non-local.cpp2:31:36: error: template argument 1 is invalid -../../../include/cpp2util.h:867:1: error: lambda-expression in template parameter type - 867 | [LAMBDADEFCAPT]< \ +../../../include/cpp2util.h:918:1: error: lambda-expression in template parameter type + 918 | [LAMBDADEFCAPT]< \ | ^ -../../../include/cpp2util.h:885:59: note: in expansion of macro ‘CPP2_UFCS_’ - 885 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) +../../../include/cpp2util.h:936:59: note: in expansion of macro ‘CPP2_UFCS_’ + 936 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) | ^~~~~~~~~~ mixed-bugfix-for-ufcs-non-local.cpp2:33:12: note: in expansion of macro ‘CPP2_UFCS_NONLOCAL’ mixed-bugfix-for-ufcs-non-local.cpp2:33:36: error: template argument 1 is invalid -../../../include/cpp2util.h:867:1: error: lambda-expression in template parameter type - 867 | [LAMBDADEFCAPT]< \ +../../../include/cpp2util.h:918:1: error: lambda-expression in template parameter type + 918 | [LAMBDADEFCAPT]< \ | ^ -../../../include/cpp2util.h:885:59: note: in expansion of macro ‘CPP2_UFCS_’ - 885 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) +../../../include/cpp2util.h:936:59: note: in expansion of macro ‘CPP2_UFCS_’ + 936 | #define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) | ^~~~~~~~~~ mixed-bugfix-for-ufcs-non-local.cpp2:21:12: note: in expansion of macro ‘CPP2_UFCS_NONLOCAL’ mixed-bugfix-for-ufcs-non-local.cpp2:21:36: error: template argument 1 is invalid