Skip to content

Commit 884d180

Browse files
committed
fix(cpp1): do not emit access specifier on x :== :() 0;
1 parent 2892889 commit 884d180

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed

regression-tests/pure2-type-and-namespace-aliases.cpp2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ myclass3: @struct type = {
4444
v4: myclass3 == v2; // OK: Doesn't use the Cpp2 placeholder type.
4545
v5: myclass4 == myclass4(); // OK: Doesn't use the Cpp2 placeholder type.
4646
v6: myclass5 == myclass5(); // OK: Doesn't use the Cpp2 placeholder type.
47+
v7 :== :() 0;
4748
}
4849

4950
myclass4: @struct type = { }

regression-tests/test-results/pure2-type-and-namespace-aliases.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ template<typename T> class myclass2;
2424
class myclass3;
2525

2626

27-
#line 49 "pure2-type-and-namespace-aliases.cpp2"
27+
#line 50 "pure2-type-and-namespace-aliases.cpp2"
2828
class myclass4;
2929

3030
template<typename T> class myclass6;
@@ -81,14 +81,15 @@ class myclass3 {
8181
public: static const myclass3 v4;// OK: Doesn't use the Cpp2 placeholder type.
8282
public: static const myclass4 v5;// OK: Doesn't use the Cpp2 placeholder type.
8383
public: static const myclass5 v6;// OK: Doesn't use the Cpp2 placeholder type.
84+
public: static constexpr auto v7 = []() -> auto { return 0; };
8485
};
8586

8687
class myclass4 {};
8788

8889
template<typename T> class myclass6 {
8990
public: template<typename U>
9091
CPP2_REQUIRES_ (true)
91-
#line 52 "pure2-type-and-namespace-aliases.cpp2"
92+
#line 53 "pure2-type-and-namespace-aliases.cpp2"
9293
static constexpr auto v = 0;
9394
};
9495

@@ -132,4 +133,5 @@ auto main() -> int{
132133
inline CPP2_CONSTEXPR myclass3 myclass3::v4 = v2;
133134
inline CPP2_CONSTEXPR myclass4 myclass3::v5 = myclass4();
134135
inline CPP2_CONSTEXPR myclass5 myclass3::v6 = myclass5();
136+
135137

source/parse.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2554,6 +2554,7 @@ struct declaration_node
25542554
// Cache some context
25552555
bool is_template_parameter = false;
25562556
bool is_parameter = false;
2557+
bool is_named = false;
25572558

25582559
// Constructor
25592560
//
@@ -7749,6 +7750,7 @@ class parser
77497750
-> std::unique_ptr<declaration_node>
77507751
{
77517752
auto n = std::make_unique<declaration_node>( current_declarations.back() );
7753+
n->is_named = named;
77527754
n->pos = start;
77537755

77547756
n->identifier = std::move(id);

source/to_cpp1.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5363,7 +5363,10 @@ class cppfront
53635363

53645364
// In class definitions, emit the explicit access specifier if there
53655365
// is one, or default to private for data and public for functions
5366-
if (printer.get_phase() == printer.phase1_type_defs_func_decls)
5366+
if (
5367+
printer.get_phase() == printer.phase1_type_defs_func_decls
5368+
&& n.is_named
5369+
)
53675370
{
53685371
if (!n.is_default_access()) {
53695372
assert (is_in_type);

0 commit comments

Comments
 (0)