Bug 217387 - Crash by importing a C++0x file
Summary: Crash by importing a C++0x file
Status: RESOLVED DUPLICATE of bug 175096
Alias: None
Product: umbrello
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Unlisted Binaries Linux
: NOR crash
Target Milestone: ---
Assignee: Umbrello Development Group
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-12-05 00:39 UTC by Benjamin Buch
Modified: 2012-07-06 00:01 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Benjamin Buch 2009-12-05 00:39:07 UTC
Application that crashed: umbrello
Version of the application: 2.3.2
KDE Version: 4.3.2 (KDE 4.3.2)
Qt Version: 4.5.3
Operating System: Linux 2.6.31-1-amd64 x86_64
Distribution: Debian GNU/Linux unstable (sid)

What I was doing when the application crashed:
I started Umbrello and importing my C++ file. This file uses variadic templates (C++0x).

----FileBegin----
// Copyright (c) 2009 Benjamin Buch
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
//    derived from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

/// \file progcoder/bitmap.hpp
/// \author Benjamin Buch (benni.buch@googlemail.com)
/// \date 02.12.2009
/// \brief Class template progcoder::global_bitmap
///
/// \todo replace the struct iterators by template aliases when the GCC supports this
///

#ifndef _progcoder_bitmap_hpp_INCLUDED_
#define _progcoder_bitmap_hpp_INCLUDED_

#include "rect.hpp"
#include "position_calculator.hpp"
#include "vectorizer.hpp"

#include <vector>
#include <utility>
#include <stdexcept>
#include <sstream>
#include <typeinfo>

namespace progcoder {

struct bitmap_configuration{};

/// \brief A bitmap for data manipulation
/// \tparam ValueTypes Types of the data that administrates the bitmap
///
template < typename ... ValueTypes >
class bitmap{
protected:
	/// \brief Self type
	typedef bitmap< ValueTypes ... > self_type;

public:
	/// \brief Types of the data that administrates the bitmap
	typedef typename vectorizer< ValueTypes ... >::type                 value_types;
	/// \brief Type of the indexed tuple element
	template < ::std::size_t Index > struct value_type{
		typedef typename ::std::tuple_element< Index, value_types >::type type;
	};
	/// \brief Type of points in the bitmap
	typedef point< ::std::size_t >                                      point_type;
	/// \brief Type of bitmap size
	typedef size< ::std::size_t >                                       size_type;
	/// \brief Type of a iterator for data
	template < ::std::size_t Index > struct iterator{
		typedef typename value_type< Index >::type::iterator type;
	};
	/// \brief Type of a iterator for const data
	template < ::std::size_t Index > struct const_iterator{
		typedef typename value_type< Index >::type::const_iterator type;
	};
	/// \brief Type of a reverse iterator for data
	template < ::std::size_t Index > struct reverse_iterator{
		typedef typename value_type< Index >::type::reverse_iterator type;
	};
	/// \brief Type of a reverse iterator for const data
	template < ::std::size_t Index > struct const_reverse_iterator{
		typedef typename value_type< Index >::type::const_reverse_iterator type;
	};

	/// \brief Constructs a blank bitmap
	bitmap();
	/// \brief Constructs a copy from bitmap
	bitmap(bitmap const& bitmap);
	/// \brief Constructs a bitmap on position (0, 0), with size width and height, initialiese all values with value
	/// \throw ::std::out_of_range
	bitmap(::std::size_t width, ::std::size_t height, ::std::vector< ValueTypes > const& ... value);
	/// \brief Constructs a bitmap on position (0, 0), with size size.width and size.height, initialiese all values with value
	/// \throw ::std::out_of_range
	bitmap(size_type const& size, ::std::vector< ValueTypes > const& ... value);
	/// \brief Constructs a bitmap on position (0, 0), with size bottom_right.x + 1 as width and bottom_right.y + 1 as height, initialiese all values with value
	/// \throw ::std::out_of_range
	bitmap(point_type const& bottom_right, ::std::vector< ValueTypes > const& ... value);
	/// \brief Constructs a bitmap on position (0, 0), with size width and height, initialiese all values with value
	/// \throw ::std::out_of_range
	bitmap(::std::size_t width, ::std::size_t height, value_types const& value = value_types());
	/// \brief Constructs a bitmap on position (0, 0), with size size.width and size.height, initialiese all values with value
	/// \throw ::std::out_of_range
	bitmap(size_type const& size, value_types const& value = value_types());
	/// \brief Constructs a bitmap on position (0, 0), with size bottom_right.x + 1 as width and bottom_right.y + 1 as height, initialiese all values with value
	/// \throw ::std::out_of_range
	bitmap(point_type const& bottom_right, value_types const& value = value_types());

	/// \brief Assigns bitmap
	bitmap& operator=(bitmap const& bitmap);

	/// \brief Get a iterator on begin of the data
	template < ::std::size_t Index >
	typename iterator< Index >::type
		begin();
	/// \brief Get a const_iterator on begin of the data
	template < ::std::size_t Index >
	typename const_iterator< Index >::type
		begin()const;
	/// \brief Get a iterator behind the data
	template < ::std::size_t Index >
	typename iterator< Index >::type
		end();
	/// \brief Get a const_iterator behind the data
	template < ::std::size_t Index >
	typename const_iterator< Index >::type
		end()const;

	/// \brief Get a reverse_iterator on end of the data
	template < ::std::size_t Index >
	typename reverse_iterator< Index >::type
		rbegin();
	/// \brief Get a const_reverse_iterator on end of the data
	template < ::std::size_t Index >
	typename const_reverse_iterator< Index >::type
		rbegin()const;
	/// \brief Get a reverse_iterator before the data
	template < ::std::size_t Index >
	typename reverse_iterator< Index >::type
		rend();
	/// \brief Get a const_reverse_iterator before the data
	template < ::std::size_t Index >
	typename const_reverse_iterator< Index >::type
		rend()const;

	/// \brief Resize the data field
	/// \attention All pointers and iterators to the data will be invalid
	void
		resize(::std::size_t width, ::std::size_t height, value_types const& value = value_types());
	/// \brief Resize the data field
	/// \attention All pointers and iterators to the data will be invalid
	void
		resize(size_type const& size, value_types const& value = value_types());

	/// \brief Get the width
	::std::size_t const
		get_width()const;
	/// \brief Get the height
	::std::size_t const
		get_height()const;
	/// \brief Get the size
	size_type const
		get_size()const;
	/// \brief Get the number of points in the bitmap
	::std::size_t const
		get_number_of_points()const;

	/// \brief Get a pointer to data for direct manipulation
	template < ::std::size_t Index >
	typename value_type< Index >::type::value_type*
		get_data();
	/// \brief Get a pointer to constant data for direct read
	template < ::std::size_t Index >
	typename value_type< Index >::type::value_type const*
		get_data()const;

	/// \brief Get a reference to the value by local coordinates
	/// \throw ::std::out_of_range
	template < ::std::size_t Index >
	typename value_type< Index >::type::value_type&
		get_point(::std::size_t x, ::std::size_t y);
	/// \brief Get a reference to the value by local coordinates
	/// \throw ::std::out_of_range
	template < ::std::size_t Index >
	typename value_type< Index >::type::value_type&
		get_point(point_type const& point);
	/// \brief Get the value by local coordinates
	/// \throw ::std::out_of_range
	template < ::std::size_t Index >
	typename value_type< Index >::type::value_type const&
		get_point(::std::size_t x, ::std::size_t y)const;
	/// \brief Get the value by local coordinates
	/// \throw ::std::out_of_range
	template < ::std::size_t Index >
	typename value_type< Index >::type::value_type const&
		get_point(point_type const& point)const;

	/// \brief Converts a lokal point in a index for direct data access
	/// \attention This function performs no range protection
	::std::size_t const
		data_pos(::std::size_t x, ::std::size_t y)const;
	/// \brief Converts a lokal point in a index for direct data access
	/// \attention This function performs no range protection
	::std::size_t const
		data_pos(point_type const& point)const;

	/// \brief Constructs a bitmap by the template-indexed values
	/// \throw ::std::out_of_range
	template < ::std::size_t  ... Index >
	bitmap< typename value_type< Index >::type::value_type ... > const
		get_subtype_bitmap()const;


protected:
	/// \brief The rectangle for global position and size
	size_type size_;
	/// \brief The data field
	value_types data_;

	/// \brief Get a point without range protection
	template < ::std::size_t Index >
	typename value_type< Index >::type&
		do_get_point(point_type const& point);
	/// \brief Get a point without range protection
	template < ::std::size_t Index >
	typename value_type< Index >::type const&
		do_get_point(point_type const& point)const;
};

template < typename ... ValueTypes >
class bitmap< std::tuple< bitmap_configuration, ValueTypes ... > >{
public:
	typedef bitmap< ValueTypes ... > type;
};


//=============================================================================
// Implementation
//=============================================================================

template < typename ... ValueTypes >
inline
bitmap< ValueTypes ... >::bitmap(
){}

template < typename ... ValueTypes >
inline
bitmap< ValueTypes ... >::bitmap(
	bitmap< ValueTypes ... > const& bitmap
):
	size_(bitmap.size_),
	data_(bitmap.data_)
	{}

template < typename ... ValueTypes >
inline
bitmap< ValueTypes ... >::bitmap(
	::std::size_t width,
	::std::size_t height,
	value_types const& value
):
	size_(width, height),
	data_(size_.get_number_of_points(), value)
{
	if(!size_.is_positive()){
		::std::ostringstream os;
		os << "::std::out_of_range: File " << __FILE__ << ", Line " << __LINE__ << "\n"
			"bitmap obtain negative size";
		throw ::std::out_of_range(os.str());
	}
}

template < typename ... ValueTypes >
inline
bitmap< ValueTypes ... >::bitmap(
	size_type const& size,
	value_types const& value
):
	size_(size),
	data_(size_.get_number_of_points(), value)
{
	if(!size_.is_positive()){
		::std::ostringstream os;
		os << "::std::out_of_range: File " << __FILE__ << ", Line " << __LINE__ << "\n"
			"bitmap obtain negative size";
		throw ::std::out_of_range(os.str());
	}
}

template < typename ... ValueTypes >
inline
bitmap< ValueTypes ... >::bitmap(
	point_type const& bottom_right,
	value_types const& value
):
	size_(bottom_right.x, bottom_right.y),
	data_(size_.get_number_of_points(), value)
{
	if(!bottom_right.is_positive()){
		::std::ostringstream os;
		os << "::std::out_of_range: File " << __FILE__ << ", Line " << __LINE__ << "\n"
			"bitmap obtain negative size";
		throw ::std::out_of_range(os.str());
	}
}


template < typename ... ValueTypes >
inline
bitmap< ValueTypes ... >&
bitmap< ValueTypes ... >::operator=(
	bitmap< ValueTypes ... > const& bitmap
){
	size_ = bitmap.size_;
	data_ = bitmap.data_;
	return *this;
}


template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template iterator< Index >::type
bitmap< ValueTypes ... >::begin(
){
	return std::get< Index >(data_).begin();
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template const_iterator< Index >::type
bitmap< ValueTypes ... >::begin(
)const{
	return std::get< Index >(data_).begin();
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template iterator< Index >::type
bitmap< ValueTypes ... >::end(
){
	return std::get< Index >(data_).end();
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template const_iterator< Index >::type
bitmap< ValueTypes ... >::end(
)const{
	return std::get< Index >(data_).end();
}


template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template reverse_iterator< Index >::type
bitmap< ValueTypes ... >::rbegin(
){
	return std::get< Index >(data_).rbegin();
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template const_reverse_iterator< Index >::type
bitmap< ValueTypes ... >::rbegin(
)const{
	return std::get< Index >(data_).rbegin();
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template reverse_iterator< Index >::type
bitmap< ValueTypes ... >::rend(
){
	return std::get< Index >(data_).rend();
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template const_reverse_iterator< Index >::type
bitmap< ValueTypes ... >::rend(
)const{
	return std::get< Index >(data_).rend();
}


template < typename ... ValueTypes >
inline
void
bitmap< ValueTypes ... >::resize(
	::std::size_t width,
	::std::size_t height,
	value_types const& value
){
	resize(size_type(width, height), value);
}

template < typename ... ValueTypes >
inline
void
bitmap< ValueTypes ... >::resize(
	size_type const& size,
	value_types const& value
){
	if(!size.is_positive()){
		::std::ostringstream os;
		os << "::std::out_of_range: File " << __FILE__ << ", Line " << __LINE__ << "\n"
			"bitmap obtain negative size";
		throw ::std::out_of_range(os.str());
	}
	data_.resize(size.get_number_of_points(), value);
	size_= size;
}


template < typename ... ValueTypes >
inline
::std::size_t const
bitmap< ValueTypes ... >::get_width(
)const{
	return size_.width;
}

template < typename ... ValueTypes >
inline
::std::size_t const
bitmap< ValueTypes ... >::get_height(
)const{
	return size_.height;
}

template < typename ... ValueTypes >
inline
typename bitmap< ValueTypes ... >::size_type const
bitmap< ValueTypes ... >::get_size(
)const{
	return size_;
}

template < typename ... ValueTypes >
inline
::std::size_t const
bitmap< ValueTypes ... >::get_number_of_points(
)const{
	return size_.get_number_of_points();
}


template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type*
bitmap< ValueTypes ... >::get_data(
){
	return const_cast< typename ::std::tuple_element< Index, self_type::value_types >::type::value_type* >(
		static_cast< self_type const& >(*this).get_data< Index >()
	);
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type const*
bitmap< ValueTypes ... >::get_data(
)const{
	return std::get< Index >(data_).empty() ?
		0 :
		&std::get< Index >(data_)[0];
}


template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type&
bitmap< ValueTypes ... >::get_point(
	::std::size_t x,
	::std::size_t y
){
	return const_cast< typename value_type< Index >::type::value_type& >(
		static_cast< self_type const& >(*this).get_point< Index >(x, y)
	);
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type&
bitmap< ValueTypes ... >::get_point(
	point_type const& point
){
	return const_cast< typename value_type< Index >::type::value_type& >(
		static_cast< self_type const& >(*this).get_point< Index >(point)
	);
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type const&
bitmap< ValueTypes ... >::get_point(
	::std::size_t x,
	::std::size_t y
)const{
	return get_point< Index >(point_type(x, y));
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type const&
bitmap< ValueTypes ... >::get_point(
	point_type const& point
)const{
	if(
		point.x <  0           ||
		point.x >= get_width()  ||
		point.y <  0           ||
		point.y >= get_height()
	){
		::std::ostringstream os;
		os << "::std::out_of_range: File " << __FILE__ << ", Line " << __LINE__ << "\n"
			"point(x = " << point.x <<
			", y = " << point.y <<
			") is outside the bitmap (width = " << get_width() <<
			", height = " << get_height() << ")";
		throw ::std::out_of_range(os.str());
	}
	return do_get_point< Index >(point);
}


template < typename ... ValueTypes >
inline
::std::size_t const
bitmap< ValueTypes ... >::data_pos(
	::std::size_t x,
	::std::size_t y
)const{
	return data_pos(point_type(x, y));
}

template < typename ... ValueTypes >
inline
::std::size_t const
bitmap< ValueTypes ... >::data_pos(
	point_type const& point
)const{
	return point.y * get_width() + point.x;
}


template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type&
bitmap< ValueTypes ... >::do_get_point(
	point_type const& point
){
	return const_cast< typename value_type< Index >::type& >(
		static_cast<
			self_type const&
		>(*this).do_get_point< Index >(point)
	);
}

template < typename ... ValueTypes >
template < ::std::size_t Index >
inline
typename bitmap< ValueTypes ... >::template value_type< Index >::type const&
bitmap< ValueTypes ... >::do_get_point(
	point_type const& point
)const{
	return std::get< Index >(data_)[data_pos(point)];
}

template < typename ... ValueTypes >
template < ::std::size_t  ... Index >
inline 
bitmap< ValueTypes ... >::bitmap< typename bitmap< ValueTypes ... >::template value_type< Index >::type::value_type ... > const
bitmap< ValueTypes ... >::get_subtype_bitmap()const{
	return bitmap< typename value_type< Index >::type::value_type ... >(
		
	);
}

}

#endif

----FileEnd----

 -- Backtrace:
Application: Umbrello UML-Modeller (umbrello), signal: Segmentation fault
The current source language is "auto; currently c".
[KCrash Handler]
#5  0x0000000000bdb11d in QListData::size (this=0x2b7df40, pObject=0x2dc5000) at /usr/include/qt4/QtCore/qlist.h:87
#6  QList<UMLObject*>::indexOf (this=0x2b7df40, pObject=0x2dc5000) at /usr/include/qt4/QtCore/qlist.h:633
#7  UMLPackage::addObject (this=0x2b7df40, pObject=0x2dc5000) at ../../../umbrello/umbrello/package.cpp:136
#8  0x0000000000b2bbbb in Uml::CmdCreateUMLObject::redo (this=0x2dabfd0) at ../../../umbrello/umbrello/cmds/generic/cmd_create_umlobject.cpp:48
#9  0x00007f7aca905398 in QUndoStack::push (this=0x262b230, cmd=0x2dabfd0) at util/qundostack.cpp:543
#10 0x0000000000bf41ef in UMLApp::executeCommand (this=0x263c380, cmd=0x2dc5000) at ../../../umbrello/umbrello/uml.cpp:2782
#11 0x0000000000bcfbce in Object_Factory::createNewUMLObject (type=<value optimized out>, name=<value optimized out>, parentPkg=0x2b7df40) at ../../../umbrello/umbrello/object_factory.cpp:141
#12 0x0000000000bd2387 in Object_Factory::createUMLObject (type=Uml::ot_Package, n=..., parentPkg=0x2b7df40, solicitNewName=true) at ../../../umbrello/umbrello/object_factory.cpp:181
#13 0x0000000000528fcb in Import_Utils::createUMLObject (type=Uml::ot_UMLObject, inName=<value optimized out>, parentPkg=0x2b7df40, comment=..., stereotype=...)
    at ../../../umbrello/umbrello/codeimport/import_utils.cpp:222
#14 0x000000000051b7cc in CppTree2Uml::parseTemplateDeclaration (this=0x7fffb8647430, ast=0x2c2f360) at ../../../umbrello/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp:214
#15 0x00000000005154c9 in TreeParser::parseLinkageBody (this=0x7fffb8647430, linkageBody=<value optimized out>) at ../../../umbrello/umbrello/codeimport/kdevcppparser/tree_parser.cpp:160
#16 0x000000000051cd76 in CppTree2Uml::parseNamespace (this=0x7fffb8647430, ast=0x2c2bde0) at ../../../umbrello/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp:96
#17 0x0000000000515349 in TreeParser::parseTranslationUnit (this=0x7fffb8647430, translationUnit=<value optimized out>) at ../../../umbrello/umbrello/codeimport/kdevcppparser/tree_parser.cpp:41
#18 0x0000000000518bd7 in CppTree2Uml::parseTranslationUnit (this=0x7fffb8647430, ast=0x2c2bc90) at ../../../umbrello/umbrello/codeimport/kdevcppparser/cpptree2uml.cpp:62
#19 0x0000000000538fe3 in CppImport::feedTheModel (this=0x26b8470, fileName=...) at ../../../umbrello/umbrello/codeimport/cppimport.cpp:98
#20 0x0000000000523882 in ClassImport::importFiles (this=0x26b8470, fileList=...) at ../../../umbrello/umbrello/codeimport/classimport.cpp:45
#21 0x0000000000be9527 in UMLApp::importFiles (this=0x263c380, fileList=0x7fffb8647970) at ../../../umbrello/umbrello/uml.cpp:2213
#22 0x0000000000bf3314 in UMLApp::slotImportClasses (this=0x263c380) at ../../../umbrello/umbrello/uml.cpp:2250
#23 0x0000000000bf9ffd in UMLApp::qt_metacall (this=0x263c380, _c=QMetaObject::InvokeMetaMethod, _id=45604672, _a=0x7fffb8647b60) at ./uml.moc:276
#24 0x00007f7ac9e40df2 in QMetaObject::activate (sender=0x266cbe0, from_signal_index=<value optimized out>, to_signal_index=6, argv=0x1f4) at kernel/qobject.cpp:3112
#25 0x00007f7aca2f4147 in QAction::triggered (this=0x2b7df40, _t1=false) at .moc/release-shared/moc_qaction.cpp:236
#26 0x00007f7aca2f55c0 in QAction::activate (this=0x266cbe0, event=<value optimized out>) at kernel/qaction.cpp:1167
#27 0x00007f7aca6f015d in QMenuPrivate::activateCausedStack (this=0x27fb6c0, causedStack=..., action=0x266cbe0, action_e=QAction::Trigger, self=true) at widgets/qmenu.cpp:967
#28 0x00007f7aca6f608f in QMenuPrivate::activateAction (this=0x27fb6c0, action=0x266cbe0, action_e=QAction::Trigger, self=true) at widgets/qmenu.cpp:1060
#29 0x00007f7acb9497a1 in KMenu::mouseReleaseEvent (this=0x27fb310, e=0x7fffb86487a0) at ../../kdeui/widgets/kmenu.cpp:456
#30 0x00007f7aca34a37f in QWidget::event (this=0x27fb310, event=0x7fffb86487a0) at kernel/qwidget.cpp:7554
#31 0x00007f7aca6f87eb in QMenu::event (this=0x27fb310, e=0x7fffb86487a0) at widgets/qmenu.cpp:2358
#32 0x00007f7aca2fa01d in QApplicationPrivate::notify_helper (this=0x25703b0, receiver=0x27fb310, e=0x7fffb86487a0) at kernel/qapplication.cpp:4065
#33 0x00007f7aca3027ca in QApplication::notify (this=<value optimized out>, receiver=0x27fb310, e=0x7fffb86487a0) at kernel/qapplication.cpp:3767
#34 0x00007f7acb8780db in KApplication::notify (this=0x7fffb864a550, receiver=0x27fb310, event=0x7fffb86487a0) at ../../kdeui/kernel/kapplication.cpp:302
#35 0x00007f7ac9e2bc9c in QCoreApplication::notifyInternal (this=0x7fffb864a550, receiver=0x27fb310, event=0x7fffb86487a0) at kernel/qcoreapplication.cpp:610
#36 0x00007f7aca301a78 in QCoreApplication::sendSpontaneousEvent (receiver=0x27fb310, event=0x7fffb86487a0, alienWidget=0x0, nativeWidget=0x27fb310, buttonDown=<value optimized out>, 
    lastMouseReceiver=...) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:216
#37 QApplicationPrivate::sendMouseEvent (receiver=0x27fb310, event=0x7fffb86487a0, alienWidget=0x0, nativeWidget=0x27fb310, buttonDown=<value optimized out>, lastMouseReceiver=...)
    at kernel/qapplication.cpp:2924
#38 0x00007f7aca36a814 in QETWidget::translateMouseEvent (this=0x27fb310, event=<value optimized out>) at kernel/qapplication_x11.cpp:4345
#39 0x00007f7aca36940f in QApplication::x11ProcessEvent (this=0x7fffb864a550, event=0x7fffb864a170) at kernel/qapplication_x11.cpp:3552
#40 0x00007f7aca39176c in x11EventSourceDispatch (s=0x2574130, callback=0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:146
#41 0x00007f7ac546713a in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#42 0x00007f7ac546a998 in ?? () from /lib/libglib-2.0.so.0
#43 0x00007f7ac546ab4c in g_main_context_iteration () from /lib/libglib-2.0.so.0
#44 0x00007f7ac9e5439c in QEventDispatcherGlib::processEvents (this=0x2549970, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:407
#45 0x00007f7aca390f1f in QGuiEventDispatcherGlib::processEvents (this=0x2b7df40, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:202
#46 0x00007f7ac9e2a562 in QEventLoop::processEvents (this=<value optimized out>, flags=...) at kernel/qeventloop.cpp:149
#47 0x00007f7ac9e2a934 in QEventLoop::exec (this=0x7fffb864a4a0, flags=...) at kernel/qeventloop.cpp:201
#48 0x00007f7ac9e2cba4 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:888
#49 0x0000000000bc7ad5 in main (argc=3, argv=0x7fffb864a9e8) at ../../../umbrello/umbrello/main.cpp:111

Reported using DrKonqi
Comment 1 Jekyll Wu 2012-07-06 00:01:46 UTC

*** This bug has been marked as a duplicate of bug 175096 ***