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,
¶m->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)
next prev parent 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).