Subject: Re: bug#14005: 24.3.50; cc-mode: Incorrectly-indented C code (wrong syntax). Test case and bisection.
From: Alan Mackenzie <[email-masked]>
To: Dima Kogan <[email-masked]>
Cc: [email-masked]
Date: Thu, 24 Dec 2015 21:47:34 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Dima.

The problem is no longer apparent in the current emacs-25 branch at
savannah, so I'm closing this bug as fixed.

On Tue, Mar 19, 2013 at 10:48:14PM -1000, Dima Kogan wrote:
> I'm observing very uninteresting-looking C code get
> incorrectly-indented. The sample source file (attached) ends with the
> following function:

>  static Matrix *NonMaximalSuppression(Matrix *strength, Matrix *orientation)
>  {
>    int x, y, i, rows = strength->rows, cols = strength->cols;
>    int pixels = strength->rows * strength->cols, maximum;
>    double str1, str2;              /* interpolated edge strength */
>    double a1, a2, b1, b2, c1, c2;  /* nearest pixels' edge strength */
>    float ux, uy;                   /* weights of a, b, c, and str */
>    double ori, str;       /* strength and orientation at center */
>    Matrix *newstrength;

>    /* Newstrength holds the NMS'ed strength values */
>    newstrength = (Matrix *)malloc(sizeof(Matrix));
>    newstrength->rows = strength->rows;
>    newstrength->sheets = 1;
>    newstrength->cols = strength->cols;
>    newstrength->ptr = (double *)calloc(pixels, sizeof(double));

>    return(newstrength);
>  }

> I'm observing that everything after the /* Newstrength .... */ comment
> gets "string" syntax, which is incorrect. This can be seen with
> (c-guess-basic-syntax). This also causes incorrect indentation of the
> empty line before the return statement (TAB there should move to column
> 2, but it stays at 0).

> The full test source file is attached (called "tst.c"). This is a slight
> modification of the source from http://ai.stanford.edu/~ruzon/compass/.
> This test case is much longer than I'd like, but the bug appears to be
> very sensitive to preceding code, so I'm leaving it alone.

> To observe the issue, you can run

>  $ emacs -Q --batch --eval '(progn (find-file "/tmp/tst.c") (goto-char
>  6072) (message "%s" (c-guess-basic-syntax)))

> The right answer is "statement", but the current version of emacs says
> "string". I did a bisection. This problem was introduced in early 2012
> with this commit:

> http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=b0b68fedb6a6fe7bc55c1fe4f256bda9a93134b5

> This means that all releases of emacs 24 are affected.

> Thanks.

-- 
Alan Mackenzie (Nuremberg, Germany).