Skip to content

Commit 2d2b3b6

Browse files
committed
fix(cpp1): do not emit access specifier on x :== :() 0;
1 parent 79984ff commit 2d2b3b6

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
@@ -25,7 +25,7 @@ template<typename T> class myclass2;
2525
class myclass3;
2626

2727

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

3131
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

@@ -133,4 +134,5 @@ auto main() -> int{
133134
inline CPP2_CONSTEXPR myclass3 myclass3::v4 = v2;
134135
inline CPP2_CONSTEXPR myclass4 myclass3::v5 = myclass4();
135136
inline CPP2_CONSTEXPR myclass5 myclass3::v6 = myclass5();
137+
136138

source/parse.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2573,6 +2573,7 @@ struct declaration_node
25732573
// Cache some context
25742574
bool is_template_parameter = false;
25752575
bool is_parameter = false;
2576+
bool is_named = false;
25762577

25772578
// Constructor
25782579
//
@@ -7899,6 +7900,7 @@ class parser
78997900
-> std::unique_ptr<declaration_node>
79007901
{
79017902
auto n = std::make_unique<declaration_node>( current_declarations.back() );
7903+
n->is_named = named;
79027904
n->pos = start;
79037905

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

source/to_cpp1.h

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

56605660
// In class definitions, emit the explicit access specifier if there
56615661
// is one, or default to private for data and public for functions
5662-
if (printer.get_phase() == printer.phase1_type_defs_func_decls)
5662+
if (
5663+
printer.get_phase() == printer.phase1_type_defs_func_decls
5664+
&& n.is_named
5665+
)
56635666
{
56645667
if (!n.is_default_access()) {
56655668
assert (is_in_type);

0 commit comments

Comments
 (0)