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.