alashworth / test-issue-import

0 stars 0 forks source link

Misleading error message when function multiply defined #197

Open alashworth opened 5 years ago

alashworth commented 5 years ago

Issue by bob-carpenter Friday May 25, 2018 at 19:41 GMT Originally opened as https://github.com/stan-dev/stan/issues/2526


From @ksvanhorn on May 25, 2018 16:47

Summary:

When a function is defined twice, the error message points to the function AFTER the second definition.

Description:

A program defines the function "rot_matrix" twice in the "functions" block. The error message points at the beginning of the definition of a later function, "scale_matrix".

Reproducible Steps:

Run stanc on the following program:

functions {
  matrix rot_matrix() {
    return rep_matrix(0,1,1);
  }

  matrix rot_matrix() {
    return rep_matrix(0,1,1);
  }

  matrix scale_matrix() {
    return rep_matrix(0,1,1);
  }
}
data {
  int<lower = 1> N;
  vector[N] y;
}
parameters {
  real<lower=0> sigma;
}
model {
  sigma ~ normal(0, 1);
  y ~ normal(0, sigma);
}     

Current Output:

SYNTAX ERROR, MESSAGE(S) FROM PARSER:

Parse Error.  Function already defined, name=rot_matrix  error in 'model661b1902a01a_foo' at line 10, column 3
  -------------------------------------------------
     8:   }
     9:   
    10:   matrix scale_matrix() {
          ^
    11:     return rep_matrix(0,1,1);
  -------------------------------------------------

Error in stanc(file = file, model_code = model_code, model_name = model_name,  : 
  failed to parse Stan model 'foo' due to the above error. 

Expected Output:

The caret should point at the beginning of the second definition of rot_matrix.

RStan Version:

2.17.3

R Version:

R version 3.4.3 (2017-11-30)

Operating System:

OS X 10.13.4

Copied from original issue: stan-dev/rstan#533

alashworth commented 5 years ago

Comment by bob-carpenter Friday May 25, 2018 at 19:41 GMT


From @bgoodri on May 25, 2018 18:1

I agree this is misleading, but I am sure it applies to all interfaces so the issue should get moved to the stan-dev/stan repo.

On Fri, May 25, 2018 at 12:47 PM, Kevin S. Van Horn < notifications@github.com> wrote:

Summary:

When a function is defined twice, the error message points to the function AFTER the second definition. Description:

A program defines the function "rot_matrix" twice in the "functions" block. The error message points at the beginning of the definition of a later function, "scale_matrix". Reproducible Steps:

Run stanc on the following program:

functions { matrix rot_matrix() { return rep_matrix(0,1,1); }

matrix rot_matrix() { return rep_matrix(0,1,1); }

matrix scale_matrix() { return rep_matrix(0,1,1); } } data { int N; vector[N] y; } parameters { real sigma; } model { sigma ~ normal(0, 1); y ~ normal(0, sigma); }

Current Output:

SYNTAX ERROR, MESSAGE(S) FROM PARSER:

Parse Error. Function already defined, name=rot_matrix error in 'model661b1902a01a_foo' at line 10, column 3

 8:   }
 9:
10:   matrix scale_matrix() {
      ^
11:     return rep_matrix(0,1,1);

Error in stanc(file = file, model_code = model_code, model_name = model_name, : failed to parse Stan model 'foo' due to the above error.

Expected Output:

The caret should point at the beginning of the second definition of rot_matrix. RStan Version:

2.17.3 R Version:

R version 3.4.3 (2017-11-30) Operating System:

OS X 10.13.4

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/stan-dev/rstan/issues/533, or mute the thread https://github.com/notifications/unsubscribe-auth/ADOrqkl4V3uhyIUUO4kyUyDUCvU6T24sks5t2DWPgaJpZM4UOR-Z .

alashworth commented 5 years ago

Comment by VMatthijs Thursday Dec 13, 2018 at 13:52 GMT


stanc3 currently says

Semantic error at file "test.stan", line 6, characters 9-19:
   -------------------------------------------------
     4:    }
     5:
     6:    matrix rot_matrix() {
                  ^
     7:      return rep_matrix(0,1,1);
     8:    }
   -------------------------------------------------

Identifier  rot_matrix  is already in use.

stanc2 still says

SYNTAX ERROR, MESSAGE(S) FROM PARSER:
Parse Error.  Function already defined, name=rot_matrix error in 'stan/src/test/test-models/good/empty.stan' at line 10, column 3
  -------------------------------------------------
     8:   }
     9:
    10:   matrix scale_matrix() {
          ^
    11:     return rep_matrix(0,1,1);
  -------------------------------------------------
alashworth commented 5 years ago

Comment by bob-carpenter Thursday Dec 13, 2018 at 14:32 GMT


This is great. I don't like the extra spaces around rot_matrix --- I think identifiers should be quoted as in C++ compiler error messages. In general, I'd follow C++ error messages because they've had a long time to think about these and get them right.

Here, I'd prefer to see something like " 'rot_matrix' is already defined".