Skip to content

Commit d3d624e

Browse files
author
Francisco Redondo Marchena
committed
Warn when star is in LHS of the declaration
Also update tests to include star_in_LHS.f test which checks the behavior of this code. Signed-off-by: Ben Brewer <[email protected]>
1 parent 01cb404 commit d3d624e

File tree

5 files changed

+16
-1
lines changed

5 files changed

+16
-1
lines changed

include/ofc/cliarg.h

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ typedef enum
3737
OFC_CLIARG_NO_WARN_NAMESPACE_COL,
3838
OFC_CLIARG_NO_WARN_TYPE_IO,
3939
OFC_CLIARG_NO_WARN_NO_LOGICAL_IF,
40+
OFC_CLIARG_NO_WARN_STAR_IN_LHS,
4041
OFC_CLIARG_NO_WARN_PEDANTIC,
4142
OFC_CLIARG_WARN_UNUSED_PROCEDURE,
4243
OFC_CLIARG_PARSE_ONLY,

include/ofc/global_opts.h

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ typedef struct
2929
bool no_warn_namespace_col;
3030
bool no_warn_type_io;
3131
bool no_warn_no_logical_if;
32+
bool no_warn_star_in_lhs;
3233
bool warn_unused_procedure;
3334
bool parse_only;
3435
bool parse_print;
@@ -49,6 +50,7 @@ static const ofc_global_opts_t
4950
.no_warn_namespace_col = false,
5051
.no_warn_type_io = false,
5152
.no_warn_no_logical_if = false,
53+
.no_warn_star_in_lhs = false,
5254
.warn_unused_procedure = false,
5355
.parse_only = false,
5456
.parse_print = false,

src/cliarg.c

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ static bool ofc_cliarg_global_opts__set_flag(
4949
case OFC_CLIARG_NO_WARN_NO_LOGICAL_IF:
5050
global->no_warn_no_logical_if = true;
5151
break;
52+
case OFC_CLIARG_NO_WARN_STAR_IN_LHS:
53+
global->no_warn_star_in_lhs = true;
54+
break;
5255
case OFC_CLIARG_NO_WARN_PEDANTIC:
5356
global->no_warn_equiv_type = true;
5457
global->no_warn_name_keyword = true;
@@ -253,6 +256,7 @@ static const ofc_cliarg_body_t cliargs[] =
253256
{ OFC_CLIARG_NO_WARN_NAMESPACE_COL, "no-warn-namespace-col", '\0', "Suppress namespace collision warning", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },
254257
{ OFC_CLIARG_NO_WARN_TYPE_IO, "no-warn-type-io", '\0', "Suppress TYPE as IO statement warning", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },
255258
{ OFC_CLIARG_NO_WARN_NO_LOGICAL_IF, "no_warn_no_logical_if", '\0', "Suppress No logical if condition warning", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },
259+
{ OFC_CLIARG_NO_WARN_STAR_IN_LHS, "no-warn-star-in-lhs", '\0', "Suppress star in lhs warning", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },
256260
{ OFC_CLIARG_NO_WARN_PEDANTIC, "no-warn-pedantic", 'p', "Suppress all pedantic warnings", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },
257261
{ OFC_CLIARG_WARN_UNUSED_PROCEDURE, "warn-unused-procedure", '\0', "Enable unused procedure warnings", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },
258262
{ OFC_CLIARG_PARSE_ONLY, "parse-only", '\0', "Runs the parser only", OFC_CLIARG_PARAM_GLOB_NONE, 0, true },

src/sema/decl.c

+8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515

1616
#include "ofc/sema.h"
17+
#include "ofc/global.h"
1718

1819

1920
static void ofc_sema_decl_init__delete(
@@ -533,6 +534,13 @@ static bool ofc_sema_decl__elem(
533534
ofc_sema_array_delete(array);
534535
return false;
535536
}
537+
538+
if (!global_opts.no_warn_star_in_lhs)
539+
{
540+
ofc_sparse_ref_warning(lhs->src,
541+
"Star %s should only be used on decl type",
542+
(ofc_sema_type_is_character(type) ? "LEN" : "KIND"));
543+
}
536544
}
537545

538546
if (!ofc_sparse_ref_empty(pdecl->record))

0 commit comments

Comments
 (0)