Skip to content

Commit

Permalink
fe: fix check condition failure
Browse files Browse the repository at this point in the history
The check condition expects duplicate arg names error to have been raised but in this case the duplicate feature sneaks in via free type.

fixes #3647
  • Loading branch information
michaellilltokiwa committed Sep 3, 2024
1 parent a651398 commit 26ad09e
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/dev/flang/fe/SourceModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,7 @@ public void addTypeParameter(AbstractFeature outer,
if (doi != null)
{
if (CHECKS) check
(!doi.containsKey(fn) || doi.get(fn).size() == 1 && doi.get(fn).getFirst() == typeParameter);
(Errors.any() || !doi.containsKey(fn) || doi.get(fn).size() == 1 && doi.get(fn).getFirst() == typeParameter);
add(doi, fn, typeParameter);
}
}
Expand Down Expand Up @@ -1010,7 +1010,7 @@ void addDeclaredInnerFeature(AbstractFeature outer, Feature f)
}
else
{
if (existing instanceof Feature ef && ef.isArgument() && f.isArgument())
if (existing instanceof Feature ef && ef.isArgument() && f.isArgument() && !f.isTypeParameter())
{
// NYI: CLEANUP: there should not be two places where
// similar error is raised.
Expand Down
25 changes: 25 additions & 0 deletions tests/reg_issue3647/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation. If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
# Tokiwa Software GmbH, Germany
#
# Source code of Fuzion test Makefile
#
# -----------------------------------------------------------------------

override NAME = reg_issue3647
include ../simple.mk
30 changes: 30 additions & 0 deletions tests/reg_issue3647/reg_issue3647.fz
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation. If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
# Tokiwa Software GmbH, Germany
#
# Source code of Fuzion test reg_issue3647
#
# -----------------------------------------------------------------------

# NYI: BUG: should not display error twice.

reg_issue3647 =>

Node(T Type, a Node T) ref is

say (type_as_value (Node i32))
21 changes: 21 additions & 0 deletions tests/reg_issue3647/reg_issue3647.fz.expected_err
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

--CURDIR--/reg_issue3647.fz:28:23: error 1: Duplicate feature declaration
Node(T Type, a Node T) ref is
----------------------^
Feature that was declared repeatedly: 'reg_issue3647.Node.T'
originally declared at --CURDIR--/reg_issue3647.fz:28:8:
Node(T Type, a Node T) ref is
-------^
To solve this, consider renaming one of these two features, e.g., as 'Tʼ' (using a unicode modifier letter apostrophe 'ʼ' U+02BC) or adding an additional argument (e.g. '_ unit' for an ignored unit argument used only to disambiguate these two).


--CURDIR--/reg_issue3647.fz:28:8: error 2: Duplicate feature declaration
Node(T Type, a Node T) ref is
-------^
Feature that was declared repeatedly: 'reg_issue3647.Node.T'
originally declared at --CURDIR--/reg_issue3647.fz:28:23:
Node(T Type, a Node T) ref is
----------------------^
To solve this, consider renaming one of these two features, e.g., as 'Tʼ' (using a unicode modifier letter apostrophe 'ʼ' U+02BC) or adding an additional argument (e.g. '_ unit' for an ignored unit argument used only to disambiguate these two).

2 errors.
Empty file.

0 comments on commit 26ad09e

Please sign in to comment.