unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Michael Welsh Duggan <mwd@cert.org>
To: Alan Mackenzie <acm@muc.de>
Cc: "11749@debbugs.gnu.org" <11749@debbugs.gnu.org>,
	Kim Storm <storm@cua.dk>
Subject: bug#11749: Acknowledgement (24.1; C-mode indentation gives wrong-type-argument error.)
Date: Tue, 09 Oct 2012 10:05:07 -0400	[thread overview]
Message-ID: <tntfw5ng2r0.fsf@waterbuck.yellow.cert.org> (raw)
In-Reply-To: <20121007105951.GA3194@acm.acm> (Alan Mackenzie's message of "Sun, 7 Oct 2012 06:59:51 -0400")

[-- Attachment #1: Type: text/plain, Size: 2358 bytes --]

Alan Mackenzie <acm@muc.de> writes:

> Hi, Michael.
>
> On Fri, Sep 21, 2012 at 01:47:15PM -0400, Michael Welsh Duggan wrote:
>> Michael Welsh Duggan <mwd@cert.org> writes:
>
>> > Michael Welsh Duggan <mwd@cert.org> writes:
>
>> >>>> There is generally no way to re-create it, so I've stopped reporting
>> >>>> these.  I wish there were some way to record all actions in c-mode
>> >>>> buffers such that they could be saved and re-played when this type of
>> >>>> problem happens.  If there were some sort of debug flag I could turn
>> >>>> on, I would turn it on by default and hopefully be able to catch some
>> >>>> useful information.
>
>> >>> M-x c-toggle-parse-state-debug
>
>> >>> (or (c-toggle-parse-state-debug 1) in your .emacs).  Warning: variable
>> >>> `c-debug-parse-state' is not buffer local.  I wrote this on 19th October
>> >>> last year to help sort out the bug you reported a little earlier.  :-)
>
>> >>> It works by calculating c-parse-state twice for each call - The first
>> >>> time normally, then again with the internal state bound to "newly
>> >>> initialised".  If the the two results differ, they are printed to
>> >>> *Messages*, together with the saved previous state.  If this does
>> >>> trigger, please note any recent buffer changes.  It may make editing
>> >>> intolerably slow.
>
>> >> I will turn this on.
>
>> I turned this on, and inserted a (ding) where cc-mode outputs an
>> inconsistency message.  I can barely stand to edit code now, due to
>> what seem to be almost every key press causing a beep.  Have you made
>> any progress here, or do you need more data?
>
> I have found the bug which is causing (most of) these dings, though I
> don't think it is the one which caused Kim's original bug.  Could you try
> out the patch below, please.  (I have also enhanced/corrected the
> debugging routines a bit, too.)

Still doesn't seem to help much here.  I have attached a file which
reliably causes a cache failure.  I have attached the smallest file of
the set of files I am working on that causes this particular problem.
Load the attached file and toggle on parse state debugging.  Then scroll
to the bottom of the file.  (Use C-v multiple times, or just M->.)  One
reason I have attached this file is that it only triggers the warning
message once.  Most of my larger files cause this to happen quite a lot.


[-- Attachment #2: mod_fan_in.lzz --]
[-- Type: text/plain, Size: 11027 bytes --]

/*
** Copyright (C) 2012 by Carnegie Mellon University.
**
** @OPENSOURCE_HEADER_START@
**
** Use of the SILK system and related source code is subject to the terms
** of the following licenses:
**
** GNU Public License (GPL) Rights pursuant to Version 2, June 1991
** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013
**
** NO WARRANTY
**
** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER
** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY
** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN
** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY
** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT
** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE,
** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE
** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT,
** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY
** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF
** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES.
** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF
** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON
** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE
** DELIVERABLES UNDER THIS LICENSE.
**
** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie
** Mellon University, its trustees, officers, employees, and agents from
** all claims or demands made against them (and any related losses,
** expenses, or attorney's fees) arising out of, or relating to Licensee's
** and/or its sub licensees' negligent use or willful misuse of or
** negligent conduct or willful misconduct regarding the Software,
** facilities, or other rights or assistance granted by Carnegie Mellon
** University under this License, including, but not limited to, any
** claims of product liability, personal injury, death, damage to
** property, or violation of any laws or regulations.
**
** Carnegie Mellon University Software Engineering Institute authored
** documents are sponsored by the U.S. Department of Defense under
** Contract FA8721-05-C-0003. Carnegie Mellon University retains
** copyrights in all material produced under this contract. The U.S.
** Government retains a non-exclusive, royalty-free license to publish or
** reproduce these documents, or allow others to do so, for U.S.
** Government purposes only pursuant to the copyright license under the
** contract clause at 252.227.7013.
**
** @OPENSOURCE_HEADER_END@
*/

/*
**  mod_fan_in.lzz
**
**    Implementation of the "Fan-In" module.
**
**    The Fan-In module copies blocks of data from a user-specified
**    number of inputs to one output.
**
*/

#hdr
#include <silk/silk.h>

RCSIDENTVAR(rcsID_MOD_FAN_OUT_H, "$Id$");

#include "module.hh"
#end

#src
RCSIDENT("$Id$");

#include "modsys.hh"

#define MOD_FAN_IN_CLASS_NAME "Fan-In"
#define DEFAULT_READ_BLOCK_SIZE 10000

#end

namespace silk {

class ModFanIn : public Module
{
    friend int mod_fan_in_so_loader(
        uint16_t        major_version,
        uint16_t        minor_version,
        void           *so_loader_data);

  private:

    static const Module::port_t ports_out[] = {
        {"out",  "Record output"},
        SK_MODULE_PORT_SENTINEL
    };

    std::vector<Module::port_t> ports_in;
    std::vector<std::string> port_names;

    enum params_id_t {
        OPT_INPUT_COUNT
    };

    /** The definition of parameters for the ModFanOut module. */
    struct class_params_t {
        /** name of the parameter */
        const char         *key;
        /** an integer identifier for it  */
        int                 val;
        /** min number of values it supports */
        long                lower;
        /** max number of values it supports */
        long                upper;
        /** description of parameter */
        const char         *description;
    };

    static ModFanIn::class_params_t class_params[] = {
        {"input_count",        OPT_INPUT_COUNT,       1, -1,
         "Number of input connectors to create"},
        {0, 0, 0, 0, 0}         /* sentinel entry */
    };

    ModFanIn()
    {
        conns_out.push_back(NULL);
    }

    ~ModFanIn() {}

  public:

    const char *get_type(void) const
    {
        return MOD_FAN_IN_CLASS_NAME;
    }

  private:

    static Module *_create() {
        return new ModFanIn();
    }

    void _init()
    {
        unsigned int i;

        if (conns_out[0] == NULL) {
            std::ostringstream os;
            os << "The " << get_type() << " module's "
               << ports_out[0].name
               << " connector is not connected";
            throw sk_error_module_bad_param_t(os);
        }
        for (i = 0; i < conns_in.size(); i++) {
            if (conns_in[i]) {
                continue;
            }
            std::ostringstream os;
            os << "The " << get_type() << " module's "
               << ports_in[i].name
               << " connector is not connected";
            throw sk_error_module_bad_param_t(os);
        }
    }

    void _run()
    {
        std::vector<Connector *> ready;
        std::vector<Connector *>::iterator conn;
        Connector *out = conns_out[0];
        void *in_block;
        void *out_block = NULL;
        size_t in_size;
        size_t out_size;
        size_t active_inputs;
        int rv;

        /* create and initialize the connector poll object */
        PollConn poller(PollConn::READ);

        for (conn = conns_in.begin(); conn != conns_in.end(); ++conn) {
            (*conn)->add_to_poll(&poller);
        }

        active_inputs = conns_in.size();

        /* run until no one is giving us data */
        while (active_inputs > 0) {
            /* Which of the upstream connectors have data?  If none have
             * data, wait forever for data to become available. */
            poller.poll(1, ready);

            if (stopped || ready.empty()) {
                goto END;
            }

            in_size = DEFAULT_READ_BLOCK_SIZE;

            /* Process all the connectors that have data */
            for (conn = ready.begin(); conn != ready.end(); ++conn) {
                rv = (*conn)->get_read_block(&in_block, &in_size);
                if (rv) {
                    --active_inputs;
                    (*conn)->remove_from_poll(&poller);
                    continue;
                }

                /* Copy the block to the downstream connector */
                out_size = in_size;
                rv = out->get_write_block(&out_block, &out_size);
                if (rv || stopped) {
                    (*conn)->return_read_block(in_block);
                    goto END;
                }
                if (stopped) {
                    (*conn)->return_read_block(in_block);
                    goto END;
                }
                assert(out_size >= in_size);
                memcpy(out_block, in_block, in_size);

                out->return_write_block(out_block, in_size);
                out_block = NULL;
                (*conn)->return_read_block(in_block);

                if (stopped) {
                    goto END;
                }
            }
        }

      END:
        if (out_block) {
            out->return_read_block(out_block);
        }
        out->stop_no_more_data();

        for (conn = conns_in.begin(); conn != conns_in.end(); ++conn) {
            (*conn)->stop();
            try {
                (*conn)->remove_from_poll(&poller);
            } catch (sk_error_conn_poll_add_remove_t &e) {
                // ignore this exception
            }
        }
    }

    void _get_ports(
        std::vector<port_t> &inputs,
        std::vector<port_t> &outputs)
    {
        const Module::port_t *port;

        inputs = ports_in;
        outputs.clear();
        for (port = ports_out; port->name; ++port) {
            outputs.push_back(*port);
        }
    }

    static Parameterized::param_registry_t *create_param_registry() {
        param_registry_t *registry = new param_registry_t();
        class_params_t *param = class_params;

        while (param->key) {
            registry->insert(
                Definition(param->key, param->description,
                           &param->val, param->lower, param->upper));
            ++param;
        }
        return registry;
    }

    static std::auto_ptr<Parameterized::param_registry_t> param_registry =
        std::auto_ptr<Parameterized::param_registry_t>(
            ModFanIn::create_param_registry());

    const Parameterized::param_registry_t& get_param_registry() const
    {
        return *param_registry;
    }

    void _set_param(
        const Definition& defn,
        const std::vector<std::string>& values) throw (Error)
    {
        int rv;
        uint32_t u32;
        unsigned int i;

        switch (*(params_id_t *)(defn.get_context())) {
          case OPT_INPUT_COUNT:
            if (!conns_in.empty()) {
                std::ostringstream os;
                os << "Invalid " << defn.get_name()
                   << " '" << values[0]
                   << "': Cannot change value once connectors are created";
                throw sk_error_module_bad_param_t(os);
            }
            rv = skStringParseUint32(&u32, values[0].c_str(), 1, 0);
            if (rv) {
                goto PARSE_ERROR;
            }
            for (i = 0; i < u32; i++) {
                Module::port_t port = {NULL, NULL};
                char name[32];
                snprintf(name, sizeof(name), "in.%u", i);
                port_names.push_back(name);
                port.name = port_names.back().c_str();
                ports_in.push_back(port);
                conns_in.push_back(NULL);
            }
            break;
        }

        return;

      PARSE_ERROR:
        std::ostringstream os;
        os << "Invalid " << defn.get_name() << " '" << values[0] << "': "
           << skStringParseStrerror(rv);
        throw sk_error_conn_param_value_t(os.str());
    }
};

int mod_fan_in_so_loader(
    uint16_t        major_version,
    uint16_t        minor_version,
    void           *so_loader_data)
{
    ModuleSystem::loader_data_t *so_loader =
        static_cast<ModuleSystem::loader_data_t *>(so_loader_data);
    ModuleSystem *module_system = so_loader->modsys;

    // ADD VERSION CHECK

    try {
        module_system->register_module(
            MOD_FAN_IN_CLASS_NAME, &ModFanIn::_create);
    }
    catch (Error &e) {
        skAppPrintErr("Failed to load " MOD_FAN_IN_CLASS_NAME ": %s",
                      e.get_string().c_str());
        return -1;
    }
    catch (...) {
        skAppPrintErr("Failed to load " MOD_FAN_IN_CLASS_NAME ": %s",
                      "Unknown error");
        return -1;
    }

    return 0;
}


}

/*
** Local Variables:
** mode:c++
** indent-tabs-mode:nil
** c-basic-offset:4
** End:
*/


[-- Attachment #3: Type: text/plain, Size: 41 bytes --]


-- 
Michael Welsh Duggan
(mwd@cert.org)

  reply	other threads:[~2012-10-09 14:05 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-19 20:45 bug#11749: 24.1; C-mode indentation gives wrong-type-argument error Kim F. Storm
2012-06-21  7:17 ` Glenn Morris
2012-06-21  9:34   ` Kim Storm
2012-08-28 16:17 ` bug#11749: 24.2; wrong-type-argument Kim F. Storm
     [not found] ` <handler.11749.B.13401389485673.ack@debbugs.gnu.org>
2012-08-28 22:49   ` bug#11749: Acknowledgement (24.1; C-mode indentation gives wrong-type-argument error.) Kim Storm
2012-08-31 11:01     ` Eli Zaretskii
2012-08-31 12:37       ` Kim Storm
2012-09-02 21:16     ` Alan Mackenzie
2012-09-03  9:47       ` Kim Storm
2012-09-03 13:56         ` Stefan Monnier
2012-09-03 14:20           ` Kim Storm
2012-09-03 18:52             ` Stefan Monnier
2012-09-05 20:48         ` Alan Mackenzie
2012-09-07  3:45           ` Michael Welsh Duggan
2012-09-07 14:53             ` Stefan Monnier
2012-09-07 16:16               ` Kim Storm
2012-09-08 21:14             ` Alan Mackenzie
2012-09-10 12:18               ` Michael Welsh Duggan
2012-09-10 12:48                 ` Michael Welsh Duggan
2012-09-21 17:47                   ` Michael Welsh Duggan
2012-10-07 10:59                     ` Alan Mackenzie
2012-10-09 14:05                       ` Michael Welsh Duggan [this message]
2012-10-10 20:00                         ` Alan Mackenzie
2012-10-14 17:06                           ` Alan Mackenzie
2012-10-23 16:13                             ` Michael Welsh Duggan
2012-10-25 13:41                             ` Michael Welsh Duggan
2012-10-28 11:36                               ` Alan Mackenzie
2012-11-04  3:43                                 ` Chong Yidong
2012-11-04 20:42                                   ` Alan Mackenzie
2012-11-21 20:58                                   ` Alan Mackenzie
2012-11-22 14:52                                     ` Stefan Monnier
2012-11-04 20:39                                 ` Alan Mackenzie
2012-11-04 21:04                                   ` Kim Storm
2012-11-14 16:52                                   ` Michael Welsh Duggan
2012-11-21 21:33                                     ` Alan Mackenzie
2012-11-26 13:25                                       ` Michael Welsh Duggan
2012-12-10  3:35                                         ` Michael Welsh Duggan
2013-01-07 12:09                                           ` Alan Mackenzie
2013-01-17 16:27                                             ` Michael Welsh Duggan
2013-01-17 16:28                                               ` Michael Welsh Duggan
2013-01-23 14:16                                               ` Alan Mackenzie
2013-01-23 15:39                                                 ` Michael Welsh Duggan
2013-01-29 11:37                                                   ` Alan Mackenzie
     [not found]                                                   ` <20130129113737.GA4544@acm.acm>
2013-02-01 22:18                                                     ` Michael Welsh Duggan
2013-02-01 23:50                                                       ` Kim Storm
2013-02-02 19:35                                                         ` Alan Mackenzie
2012-09-10 13:10                 ` Michael Welsh Duggan
2012-09-10 13:22                   ` Michael Welsh Duggan
2012-09-10 18:25                     ` Michael Welsh Duggan
2012-09-05 13:11 ` bug#11749: I also have this issue Denis Zalevskiy
2013-01-08 19:10 ` bug#11749: Acknowledgement (24.1; C-mode indentation gives wrong-type-argument error.) Glenn Morris
2013-01-09 22:13   ` Alan Mackenzie
2013-02-02 18:37 ` bug#11749: 24.1; C-mode indentation gives wrong-type-argument error Alan Mackenzie
2013-01-08 13:49   ` bug#13385: 24.1; TAB in C file causes type error Julian Stecklina
     [not found]     ` <handler.13385.D11749.1359830688892.notifdone@debbugs.gnu.org>
2013-02-03 13:00       ` bug#13385: closed (Re: 24.1; C-mode indentation gives wrong-type-argument error.) Julian Stecklina

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tntfw5ng2r0.fsf@waterbuck.yellow.cert.org \
    --to=mwd@cert.org \
    --cc=11749@debbugs.gnu.org \
    --cc=acm@muc.de \
    --cc=storm@cua.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).