forked from hsutter/cppfront
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into Add-version-to-generated-file
Signed-off-by: Herb Sutter <[email protected]>
- Loading branch information
Showing
311 changed files
with
11,192 additions
and
8,182 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
name: Multi-platform Build of cppfront | ||
on: push | ||
jobs: | ||
build-windows: | ||
runs-on: windows-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: ilammy/msvc-dev-cmd@v1 | ||
- name: Compiler name & version | ||
run: cl.exe | ||
- name: Build | ||
run: cl.exe source/cppfront.cpp -std:c++latest -MD -EHsc -experimental:module -W4 | ||
build-unix-like: | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
runs-on: [ubuntu-latest] | ||
compiler: [g++-10, g++-11, g++-12, clang++-12, clang++-14] | ||
cxx-std: ['c++20', 'c++2b'] | ||
exclude: | ||
# GCC 10 doesn't have support for c++23 | ||
- compiler: g++-10 | ||
cxx-std: 'c++2b' | ||
# Clang 12 and 14 do not compile on 'c++2b' due to llvm/llvm-project#58206 | ||
- compiler: clang++-12 | ||
cxx-std: 'c++2b' | ||
- compiler: clang++-14 | ||
cxx-std: 'c++2b' | ||
include: | ||
- runs-on: macos-11 | ||
compiler: clang++ | ||
cxx-std: 'c++20' | ||
- runs-on: macos-latest | ||
compiler: clang++ | ||
cxx-std: 'c++20' | ||
runs-on: ${{ matrix.runs-on }} | ||
env: | ||
CXX: ${{ matrix.compiler }} | ||
CXXFLAGS: -std=${{ matrix.cxx-std }} -Wall -Wextra -Wold-style-cast -pthread | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Install compiler | ||
if: startsWith(matrix.runs-on, 'ubuntu') | ||
run: sudo apt-get install -y $CXX | ||
- name: Compiler name & version | ||
run: $CXX --version | ||
- name: Build | ||
run: $CXX source/cppfront.cpp $CXXFLAGS -o cppfront |
This file contains 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
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
#include <chrono> | ||
using namespace std::chrono_literals; | ||
main: () = { | ||
[[assert: 10 as i32 == 10]] | ||
[[assert: 10LL as i32 == 10]] | ||
[[assert: 10s as std::chrono::seconds == 10s]] | ||
assert( 10 as i32 == 10 ); | ||
assert( 10LL as i32 == 10 ); | ||
assert( 10s as std::chrono::seconds == 10s ); | ||
} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
namespace ns { | ||
|
||
template<bool> struct t { }; | ||
constexpr bool f(const t<true>&) { return true; } | ||
constexpr t<true> o{}; | ||
|
||
} // namespace ns | ||
|
||
ns: namespace = { | ||
|
||
// Variables. | ||
|
||
v0: <_: t<o.f()>> bool == false; // Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context) | ||
|
||
v1: t<o.f()> == t<true>(); // Fails on Clang 12 (lambda in unevaluated context). | ||
|
||
v2: bool == o.f(); | ||
|
||
// Functions. | ||
|
||
g: <_: t<o.f()>> () = { } // Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context) | ||
|
||
g: (_: t<o.f()>) = { } // Fails on Clang 12 (lambda in unevaluated context). | ||
|
||
g: () pre(o.f()) = { } | ||
|
||
h: () -> t<o.f()> = o; // Fails on Clang 12 (lambda in unevaluated context). | ||
|
||
// Aliases. | ||
|
||
a: <_: t<o.f()>> type == bool; // Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context) | ||
|
||
b: <_: t<o.f()>> _ == false; // Fails on GCC ([GCC109781][]). | ||
|
||
c: type == t<o.f()>; // Fails on Clang 12 (lambda in unevaluated context) and Clang 12 (a lambda expression cannot appear in this context) | ||
|
||
d: _ == t<o.f()>(); // Fails on Clang 12 (lambda in unevaluated context). | ||
|
||
u: @struct type = { | ||
b: bool == o.f(); | ||
c: bool == :(x: std::type_identity_t<decltype(o.f())>) x;(true); // Fails on Clang 12 (lambda in unevaluated context). | ||
g: (s, sz) pre(s.sz() != 0) = { } | ||
} | ||
|
||
} // namespace ns | ||
|
||
main: () = { } | ||
|
||
// [GCC109781]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109781 |
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
|
||
iterator: @value <T> type = { | ||
public x: T = 0; | ||
operator++: (inout this) -> forward iterator<T> requires true = { x++; return this; } | ||
} | ||
|
||
iterator2: @value <T> type = { | ||
public x: T = 0; | ||
} | ||
operator++: <T> (inout it: iterator2<T>) -> forward iterator2<T> requires true = { it.x++; return it; } | ||
|
||
int main() { | ||
{ | ||
iterator<int> i; | ||
std::cout << (++i).x; | ||
std::cout << (++i).x; | ||
std::cout << i++.x; | ||
std::cout << i++.x; | ||
std::cout << i.x << "\n"; | ||
} | ||
|
||
{ | ||
iterator2<int> i; | ||
std::cout << (++i).x; | ||
std::cout << (++i).x; | ||
std::cout << i++.x; | ||
std::cout << i++.x; | ||
std::cout << i.x << "\n"; | ||
} | ||
} | ||
|
||
|
||
|
||
number: @struct type = { | ||
operator<=>: (this, that) -> _; | ||
operator-: (this, _) -> int = 0; | ||
} | ||
|
||
number_line: @struct <Op: i8, Id: i32> type = { | ||
this: number; | ||
} | ||
|
||
number_line_pre_increment: <Id: i32> type == number_line<0b1110, Id>; | ||
number_line_pre_decrement: <Id: i32> type == number_line<0b1101, Id>; | ||
number_line_post_increment: <Id: i32> type == number_line<0b1011, Id>; | ||
number_line_post_decrement: <Id: i32> type == number_line<0b0111, Id>; | ||
|
||
operator++: <Op: i8, Id: i32> (inout x: number_line<Op, Id>) -> forward number_line<Op, Id> requires bool(Op & 1) = x; | ||
operator--: <Op: i8, Id: i32> (inout x: number_line<Op, Id>) -> forward number_line<Op, Id> requires bool(Op & 2) = x; | ||
|
||
operator++: (inout x: number_line_pre_increment<0>) -> forward number_line_pre_increment<0> = x; | ||
operator--: (inout x: number_line_pre_decrement<0>) -> forward number_line_pre_decrement<0> = x; | ||
|
||
operator++: (inout x: number_line_pre_increment<1>) -> forward const number_line_pre_increment<1> = x; | ||
operator--: (inout x: number_line_pre_decrement<1>) -> forward const number_line_pre_decrement<1> = x; |
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Oops, something went wrong.