diff --git a/regression-tests/pure2-trailing-comma-assert.cpp2 b/regression-tests/pure2-trailing-comma-assert.cpp2 new file mode 100644 index 000000000..4e0346bb4 --- /dev/null +++ b/regression-tests/pure2-trailing-comma-assert.cpp2 @@ -0,0 +1,3 @@ +main: () = { + assert(true, "some_potentially_long_string",); +} diff --git a/regression-tests/test-results/apple-clang-14-c++2b/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/apple-clang-14-c++2b/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/apple-clang-14-c++2b/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/apple-clang-14-c++2b/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/apple-clang-15-c++2b/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/apple-clang-15-c++2b/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/apple-clang-15-c++2b/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-12-c++20/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/clang-12-c++20/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-12-c++20/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/clang-12-c++20/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-15-c++20-libcpp/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/clang-15-c++20-libcpp/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-15-c++20/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/clang-15-c++20/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-15-c++20/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/clang-15-c++20/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-18-c++20/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/clang-18-c++20/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/clang-18-c++20/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/clang-18-c++20/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/gcc-10-c++20/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/gcc-10-c++20/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/gcc-10-c++20/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/gcc-13-c++2b/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/gcc-13-c++2b/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/gcc-13-c++2b/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/gcc-14-c++2b/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/gcc-14-c++2b/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/gcc-14-c++2b/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/msvc-2022-c++20/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/msvc-2022-c++20/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/msvc-2022-c++20/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-trailing-comma-assert.cpp.execution b/regression-tests/test-results/msvc-2022-c++latest/pure2-trailing-comma-assert.cpp.execution new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/msvc-2022-c++latest/pure2-trailing-comma-assert.cpp.output b/regression-tests/test-results/msvc-2022-c++latest/pure2-trailing-comma-assert.cpp.output new file mode 100644 index 000000000..e69de29bb diff --git a/regression-tests/test-results/pure2-trailing-comma-assert.cpp b/regression-tests/test-results/pure2-trailing-comma-assert.cpp new file mode 100644 index 000000000..170c91887 --- /dev/null +++ b/regression-tests/test-results/pure2-trailing-comma-assert.cpp @@ -0,0 +1,24 @@ + +#define CPP2_IMPORT_STD Yes + +//=== Cpp2 type declarations ==================================================== + + +#include "cpp2util.h" + +#line 1 "pure2-trailing-comma-assert.cpp2" + + +//=== Cpp2 type definitions and function declarations =========================== + +#line 1 "pure2-trailing-comma-assert.cpp2" +auto main() -> int; + +//=== Cpp2 function definitions ================================================= + +#line 1 "pure2-trailing-comma-assert.cpp2" +auto main() -> int{ +#line 2 "pure2-trailing-comma-assert.cpp2" + if (cpp2::cpp2_default.is_active() && !(true) ) { cpp2::cpp2_default.report_violation(CPP2_CONTRACT_MSG("some_potentially_long_string")); } +} + diff --git a/regression-tests/test-results/pure2-trailing-comma-assert.cpp2.output b/regression-tests/test-results/pure2-trailing-comma-assert.cpp2.output new file mode 100644 index 000000000..f56ac9610 --- /dev/null +++ b/regression-tests/test-results/pure2-trailing-comma-assert.cpp2.output @@ -0,0 +1,2 @@ +pure2-trailing-comma-assert.cpp2... ok (all Cpp2, passes safety checks) + diff --git a/regression-tests/test-results/pure2-trailing-comma-assert.out b/regression-tests/test-results/pure2-trailing-comma-assert.out new file mode 100644 index 000000000..e69de29bb diff --git a/source/parse.h b/source/parse.h index 0c35215c8..1e83a5c8a 100644 --- a/source/parse.h +++ b/source/parse.h @@ -8006,6 +8006,11 @@ class parser } } + // Consume trailing comma + if (curr().type() == lexeme::Comma) { + next(); + } + if (curr().type() != lexeme::RightParen) { error("expected ')' at the end of the contract"); return {};