Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Misleading error message when function multiply defined #197

Open
alashworth opened this issue Mar 12, 2019 · 3 comments
Open

Misleading error message when function multiply defined #197

alashworth opened this issue Mar 12, 2019 · 3 comments
Labels
bug Something isn't working feature

Comments

@alashworth
Copy link
Owner

Issue by bob-carpenter
Friday May 25, 2018 at 19:41 GMT
Originally opened as stan-dev/stan#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 alashworth added bug Something isn't working feature labels Mar 12, 2019
@alashworth
Copy link
Owner Author

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 <
[email protected]> 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<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


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

@alashworth
Copy link
Owner Author

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
Copy link
Owner Author

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".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working feature
Projects
None yet
Development

No branches or pull requests

1 participant