Those are the known issues listed by the version in which they have been found. Unless noted, these bugs are fixed in the following release.
A note on bug tracking: internally, I keep an issue tracker using the awesome Trac tool (http://trac.edgewall.org/). Currently that ticket database contains roughly 500 entries, ranging from refactoring ideas to critical bugs. The list below is an excerpt containing the issues with relevance for the end user community.
If you encounter bugs not found in that list, please use to mail address listed on the contacts page or the forum to report issues.
r1 = pya.Region() r2 = pya.Region() # will crash: r1 += r2 # will not crash: r1.__iadd__(r2)
The object returned from PluginFactory#create_plugin is not protected against destruction by the garbage collector which may lead to occasional crashes in the application. A workaround is to explicitly protect the object:
def create_plugin(manager, main_window, view) pi = PluginTest.new pi._unmanage pi endThis bug will be fixed in 0.24.6.
For "almost parallel" connected edges, the sizing algorithm will produce
incorrect output with spiky distortions.
This bug will be fixed in 0.24.6.
The diff tool reports too many or too few differences if the input layouts contain different layers and one of the following options is used:
If layers with names and layer/datatype specification are present, the search feature does not work on shapes. The reason is a incorrect query which cannot be executed. A workaround is to edit the query in the "Custom" page: replace the layer expression (like "NAME (1/0)") by a plain layer/datatype specification. For example, replace
shape on layer NAME (1/0) ...by
shape on layer 1/0 ...and run the query from the custom page.
The OASIS writer will refuse to write 1x1 array instances and bail out with an assertion. This bug will be fixed in 0.24.5.
The property value is written as a "bstring", but it should be a "nstring". This bug will be fixed in 0.24.5.
Unlike C++, QFont and QColor are not valid types storable within a QVariant. This currently leaves it impossible to change the font or colors for a QTreeWidgetItem for example. This bug will be fixed in 0.24.5.
Instead of writing the chosen top cell, the real top cell of the layout is written. This bug will be fixed in 0.24.4.
Strict mode is not implemented with respect to these topics:
Cells starting with a single "$" character and followed by a number (for example, "$1") may get messed up when reading strict mode OASIS. This bug will be fixed in 0.24.3.
The DRC "size" operation does not size away small boxes (smaller than twice the sizing value) for layers containing a single box on top level only. This bug will be fixed in 0.24.3.
When using nested libraries (libraries referencing other libraries), cells may get lost when closing and reloading layouts. This bug will be fixed in 0.24.3.
DRC files with properties can be loaded into the marker browser, but will make the browser crash if the properties are not filled uniform - i.e. some markers are lacking some properties. This will be fixed in 0.24.3.
According to the documentation, the type of this attribute should be integer, since the accepted values are 0, 1 or 2. This will be fixed in 0.24.3.
Contrary to the OASIS specification, S_BOUNDING_BOX standard properties are not written into the cell table, but along with the cell itself. This will be fixed in 0.24.3.
The "klayout_vo.exe" binary found in the installation directory is not a pure "viewer-only" version as is was before. This will be fixed in 0.24.2.
In a descended view, the "Flip" and "Rotate" functions do not maintain the center of the selection as they do in a non-descended view. Instead the shapes and instances are shifted far ways. This will be fixed in 0.24.2.
Expressions are used in search & replace operations for example. Among others, they provide arithmetic operations. When using binary arithmetic operators such as "+", the expression is evaluated with the first type. If that type is an integer, the computation is done in integers too. For example "to_i(2)+1.4" renders 3. The expected behavior (as seen in other languages) is to use floating-point arithmetics instead. This will be fixed in 0.24.2.
In some cases, the PYTHONPATH environment variable needs to be set to point KLayout to the proper
place for the Python libraries. This is the case if KLayout is built against a Python version that does
not come with a proper PYTHONPATH built into it. This is not an issue when building against a
Python package that comes with a Linux distribution or for the binary package on Windows.
If the PYTHONPATH is required and not set correctly, the Python interpreter aborts on initialization.
Unfortunately this a feature of Python and cannot be worked around easily.
In several places, ".lyp" files can be combined with "add all other layers". This will create entries for
layers not listed in the ".lyp" file. There is a bug in that feature if the ".lyp" file uses named layers and
the layout does not and vice versa. For example, if the ".lyp" file specifies "NAME 1/0" for the layer source
(name "NAME" and/or layer 1, datatype 0) and the layout is a GDS2 file which can only have a "1/0" layer, a
new entry will be created with "NAME 1/0" because that layer is considered different from "1/0".
This will be fixed in 0.24.1.
Apparently, the -O3 optimization used in the standard release build configuration is too
aggressive for the gcc version present in RHEL 6 releases. Crashes have been reported in the
net tracer module which appear to be related to that combination. A workaround is to reduce the
optimization in the configuration file ("config/Makefile.conf.linux-64-gcc-release") to -O2.
Because runtime effects appear to be minimal between -O3 and -O2 in recent CPU/compiler
combinations, I'll switch to -O2 in version 0.24.1.
In 0.24, the shape method became non-const to allow modification of the selection. But as an undesired side effect, "shape" cannot be called any more on the ObjectInstPath object delivered by LayoutView#each_object_selected. Hence the following code fails with a message saying that a non-const method (shape) cannot be called on a const object (s):
view.each_object_selected { |s| puts s.shape.to_s }A workaround is to use a copy of the ObjectInstPath object:
view.each_object_selected { |s| puts s.dup.shape.to_s }This issue will be fixed in version 0.24.1.
Python marks the end of an iteration sequence by raising a StopIteration exception. This exception appears in the debugger which is not desired. It should be ignored. This will be fixed in 0.24.1.
The following code causes an application crash since the object returned by "dup()" is short-living and the iterator delivered by "each()" does not keep a reference. Hence the object is destroyed before the iterator finishes:
shapes = pya.Shapes() shapes.insert(pya.Box(0, 1, 2, 3)) for s in shapes.dup().each(): print(str(s))A workaround is to assign the duplicate to a variable which lives longer:
shapes = pya.Shapes() shapes.insert(pya.Box(0, 1, 2, 3)) shapes_dup = shapes.dup() for s in shapes_dup.each(): print(str(s))
Deviating from the spec, only single separator characters between x and y coordinate of points are allowed. This will be fixed in 0.23.11.
The DEF reader takes 0 for the default path extension. The default extension should be half the width of the path. This will be fixed in 0.23.11.
The following DRC script will crash, because in the "output" statement, the layer used for input a second time is overwritten:
a = input(1) b = input(2) (b - a).output(1) # will crash, because a source has been overwritten by "output": (a - b).output(10)This will be fixed in 0.24.
When loading or creating big images (more than ~ 12k x 12k pixels) the application will
crash. This is due to the limitation of Qt library which computes the memory requirement
for an image as 32bit integer.
Version 0.23.10 does not crash but rejects such images. In Ruby scripting, an option will be
provided to create monochrom images. For rasterization purposes, this will extend the
capabilities to creating images of more than 100k x 100k pixels.
This issue will be fixed with 0.23.10.
This issue will be fixed with 0.23.10.
The CIF reader is not fully compatible with the CIF specification. For example,
lower-case characters are not ignored as they should.
This issue will be fixed with 0.23.10.
E and W orientation on DEF PIN statements are swapped.
This issue will be fixed with 0.23.9.
Sometimes shapes are reported as inside even though they are not.
This issue will be fixed with 0.23.8.
This happens in particular if an input layer is overwritten.
This issue will be fixed with 0.23.7.
This issue will be fixed with 0.23.7.
In certain configurations (big polygons embracing smaller ones) width/spacing errors are reported more than once. The error count
is too high.
This issue will be fixed with 0.23.6.
The following commands on the Ruby console make the program crash: "require 'net/http'; uri = URI('xyz')"
This issue will be fixed with 0.23.5.
UTF8 encoding is not implemented correctly for the XML reader. That is causing problems for
macros containing characters with ordinals >= 128, for example german umlaut characters.
This applies to all XML files, specifically .lym macros, where such characters are not read
properly when they appear in the code or description texts for example.
This issue will be fixed with 0.23.4.
GDS files with embedded PCell's written with previous versions (0.22.x and less) are not read correctly in some cases. Vice versa, PCell context information written with 0.23.x cannot be read by 0.22.x and less.
The scalable fonts work as expected.
Addressing layout views using the "@n" notation in "target", "source" and "layout" gives an error about an undefined variable "i".
Currently, the source code does not build with Xcode on MacOS 10.9. Xcode uses the clang/LLVM compiler and unfortunately the issue could not be reproduced on Linux systems with clang 3.0 and 3.3.
Multiple inputs with different database units do not work as expected and the database unit of output file generated by DRC scripts (target command) is always 0.001, regardless of the input file's database unit.
The "log to file" function does not work as described.
Items in child cells are now shown relative to the current cell. Instead, the position in their direct parent cell is shown which typically does not match if the parent is not the current cell.
Since KLayout 0.23 introduced a new feature for .lyp files (valid/invalid layers), layer properties
files written with version 0.23 and later cannot be read by older versions. This is because the
XML reader was implemented in a strict fashion and will refuse to load files with unknown elements.
This will be changed in the future, but it won't be ported back to the older versions. Hence
the solution will not become effective immediately.
A workaround is to remove all "valid" elements from a .lyp file written by version 0.23.
The method reports false if only if the point is on the polygon edge. If the point is outside, the method reports true again.
Report database output is not working as described. Currently there is no simple workaround for that issue.
In many CIF files, GDS layer numbers are not assigned properly, resulting in duplicate or missing shapes.
Performance may be poor in certain configurations, in particular when boolean operations are involved. In addition, the output generated by the net tracer's export function may contain many overlapping shapes.
It is recommended to use editor mode when working with the net tracer. In viewer mode, OASIS shape arrays are used internally which slows down the net tracer and sometimes leads to wrong results.
When the macro editor is closed and opened again the list of entries in the console is doubles. This may render huge configuration files. A quick workaround is to delete the line with the "<macro-editor-console-mru>" entry in the configuration file (on Linux in "$HOME/.klayout/klayoutrc") regularily.
KLayout crashes when a panel is closed while the "insert instance" form is still open. A workaround is to choose "Select" mode or hit Esc before closing a view.
KLayout crashes when a layout is loaded into the current view while the net tracer is highlighting a net.
When the XOR tool is stopped, some memory is not released. This will create a memory leak and that memory is no longer available for other features.
On the first start of a new version, the help system's index is generated. When this operation is cancelled, the help index may not be available fully.
when placing an instance at the bounding box (not the origin) and using a rotation angle, the reference point is not computed correctly and the instance is somewhat hard to place.
When trying to add a new folder to the list of displayed macro locations, the application sometimes crashes with a segmentation fault.
In some configurations (apparently related to cells rotated by arbitrary angles), the layout is not drawn correctly and artefacts may appear. As a workaround, this can be solved by disabling bitmap caching.
Multi-tab layer properties files may not load properly (display more items per tab than desired) when used as default layer properties files.
This happens when the number of comment lines is odd. The issue is fixed in 0.22.3-r1640 (see "Help/About" dialog).
When multiple layouts are edited and PCells or library cells are instantiated, layers may be created in the current layout which belong to the other layout that is edited.
When "bitmap caching" is enabled, a segmentation fault may happen during drawing in certain (rare) configurations.
Instead, "deep copy mode" is used always. In that mode, new cells are created when an instance is copy and pasted. The intended behavior is just to copy the instance, not the cell which is instantiated.
The previous (0.21.x) behavior was that local, per-user configuration files override settings from the global configuration file (in the installation directory). The intention was to provide a default configuration through global configurations. In 0.22.2, global configuration files always override per-user settings. That is not the intended behavior
When the arrow keys are used while a selection is dragged with the mouse, the original shape is moved which results in a strange behavior.
Instead, the cell is duplicated, but it's no longer a PCell or library cell.
The -v option is supposed to print the version number. After printing it, the executable terminates with a segmentation fault.
Using Unicode filenames (i.e. Chinese) file names does not work properly. In particular these files are not opened on Windows. Unicode file names are not recorded properly in the "recently used" list.
The outline layer is not always generated correctly. Pin labels are not generated on pin shapes for LEF import.
The application issues a segmentation fault on exit (or "is not working" on Windows) when the clipboard contains data.
In some cases (i.e. breakpoint in a widget callback) the debugger will crash with a "Stack level too deep" message.
There is no way to copy the instance plus cells currently.
If the Instance function is cancelled and a PCell was active, a new top cell will remain which holds the PCell that was about to be placed. These cells can be deleted manually, but that may be annoying.
When switching between versions, the help index that KLayout creates once may grow larger every time a new program version is used. This can increase startup times of the program.
This function is supposed to disable all selectable items. Instead, an internal error message is issued. There is a patch for that problem here.
There is a patch for that problem here.
Because of this the text object size may not be correct if the user unit is not micron.
This can be annoying effects if you are used to a particular behavior. On the other hand, moving with the arrow keys now is possible in move mode.
"-z" not is a true "non-GUI" mode, in which no XServer connection is made on Linux. The advantage of this is that KLayout can be used as a engine on display-less servers. But some scripts depending on MainWindow or LayoutView objects will not work because these objects are no longer available. The solution will be to restore the original behavior of "-z" and implement a different, true display-less mode (i.e. "-zz").
On some platforms, apparently Linux and recent Qt versions, KLayout crashes when custom key bindings are defined and the respective key is pressed.
Drag & drop does not work correctly within the macro tree on Windows. KLayout crashes when trying to open a macro file that is not writable.
SR command (step-and-repeat) is not supported currently. "AM" macro expansion does not work as expected: parameter expansion sometimes fails and the macro expansion does not use the units at definition but at instantiation.
Layers are not copied to the current position but rather at the end of the layer tree.
OASIS circles are represented as single-point paths with round ends. Such paths should be written as "R" round flash primitives to CIF.
"Save Current Cell As" alters the state of the view. In effect, another "Save" or "Save Current Cell As" does not give the expected result. In particular, "Save" will repeat "Save Current Cell As" and not save the whole layout.
Images consume more memory than they are expected to. A single RGB pixel has a footprint of 15 Bytes.
Currently, the time written into the GDS timestamp entries for BGNLIB and BGNSTR is a dummy value.
In some cases, in particular when writing layers with GDS layer/datatype plus a name, the DXF writer will create layer names with blanks in it. AutoCAD does not accept such files.
Foreground objects (i.e. rulers) are not rendered correctly in the printout.
The largest cell is selected which may not necessarily a top cell.
The PCB importer does not accept many Excellon drill files, in particular when they contain routes.
That feature is not intended and does not work correctly.
Currently, Reset does not immediately reset the configuration.
Due to internal 32bit-processing, some g-deltas can be subject to overflow which gives wrong coordinates.
The clip function does not work correctly if empty cells are present.
Some problems have been reported when using Ruby script and the Ruby 1.9 interpreter. This is in particular the case in the Windows executable. "Dir.glob" does not work correctly for example.
The automatic detection of the GDS2Text format fails in some cases.
Layouts with large coordinates are not written to OASIS correctly in some cases.
The geometrical content of the instance is not drawn correctly in some cases.
When directly reading a PCB project (without using the assistant), some functions are broken (Bottom mounting mode, top cell, DBU).
The reader does not correctly handle check names with a dot.
The first tab's name is not read.
The navigator is broken. It is not functional if KLayout is closed with the navigator open.
Arc interpolation of polylines does not work correctly.
Bulges are not supported for polylines.
Select (transient or on click) is slow in some cases. This happens in particular if cells in the hierarchy overlap heavily and many layers are present.
The edges will be reported to intersect even if they don't. A workaround is to test if the bounding boxes overlap and the edges intersect.
Some POLYLINE examples were using a global width which was overridden by a per-vertex width. In that case the global width is taken rather than the correct local one.
On KDE, files cannot be opened when the path contains non-ASCII characters on UTF-8 file systems. In some cases, the decimal point is inconsistently ',' instead of '.' which is the standard for KLayout.
The CIF reader currently does not understand "DS" commands without a scale specification (i.e. "DS 20"). It always requires two additional numbers specifying the scale as a ratio of two integers (i.e. "DS 20 1 10").
The clockwise rotate method rotates counterclockwise and vice versa.
Much is drawn and much more isn't ...
On some systems, the program crashes when a ruby script is loaded (i.e. with the "-rm" option) with a message "[BUG] terminated node (0x2a9708ca70)" or similar. This seems in particular to
In particular, interpretation of POLYLINE and LWPOLYLINE entities is not clear yet. In comparison to other converters, no merging of separate lines into polygons is provided.
This is important, because const RdbItem objects are commonly encountered when scanning through a marker database with RBA.
The interpretation of certain features (i.e. array instances, extrusion direction) is not clear yet.
Incorrect layers are written for example when a layer subset is written. In addition, mapping or selection of input layers does not work correctly for DXF and CIF readers.
The program does not remember reader options when the dialog is closed.
A segmentation fault occurs on Windows in the "each_selected" method of LayoutView.
DXF and CIF readers and writers implement only very basic features. Some important capabilities are missing, in particular for the DXF part.
When the marker browser is opened with a maximum number of markers set to a value not equal to 1000 (the default), the program crashes if the marker browser window is opened from the menu (it works when the marker database is loaded from the command line with the -m switch).
This bug is related to branching conditions. In such cases, a net might not be extracted correctly.
The "outline" macro is read as a thin outline also in the "closed" case by the RS274X reader.
When the GDS2 writer has to reduce the number of points of a polygon, it will cut the polygon into smaller pieces. Under some circumstances, this algorithm fails. To avoid this problem, use the Multi XY record mode if possible.
Due to a bug in Qt's QPixmap constructor in Qt 4.6.0, KLayout does not work with this version.
In most cases, ruby modules are not looked for in the wrong path. The intention was to search for ".rbm" files in the directory where KLayout is installed. Instead, the current or any other directory is searched depending on how the KLayout executable is specified on the command line.
The OASIS reader does not accept files with forward references of the special "S_GDS_PROPNAME" property name.
In some cases, array references are not considered and layers appear to be empty even if they are not.
That is a ruby problem (http://www.ruby-forum.com/topic/198545). The problem is known and a new libruby version should be available soon.
In some build environments, problems have been encountered with GDS text files with negative values.
The interactive stretching of images with the square handles is sometimes leading to invalid results and does not work properly.
The item list is abbreviated using a dummy item labelled "...". When clicking at this item, the application crashes.
This feature marks a layer "unused" when now shape is shown on that layer in the view area. Currently, the application becomes very slow in some cases when this option is used.
When the layout is empty (no cell present, i.e. top cell was deleted) and "Instance" mode is selected in editor mode, the program crashes with an internal error.
There are still some issues on Mac OS X, as well for the build as for the program itself - in particular with Qt 4.5.x. For example, with accessibility enabled, the program crashes when a file is loaded. This will be fixed in version 0.18.1.
The sizing function sometimes produces invalid results, in particular when doing a strong undersize.
The 'ar' call has been changed such that the Mac OS X build should work now (not tested since no test system was available).
When double-clicking on a path end in partial edit mode (dragging just the path end), the program crashed in some cases.
Not all instances are taken into account.
The DBU per user unit is used, which is not correct. Instead the DBU per meter unit should be used.
Strange effects occure when a non-modal front dialog is moved over the canvas area.
Space characters are not represented.
When the properties dialog is closed using the system menu (the "X" button in the window title bar), KLayout goes into an unusable state. This does not happen if the dialog is closed using the "Close" button.
This happens if more than 100 text objects are present that have identical locations.
This was a known limitation but came up recently in a certain application.
In GDS files, row and column vectors can be arbitrary x/y value pairs. However, some tools implement a more strict interpretation in which only orthogonal row and column vectors are allowed. Also, row and column must be oriented in a certain way. In addition, the description of row and column vectors is swapped.
Apparently due to a problem with Qt's grabMouse function on some Windows installations the display freezes when a zoom box or selection box is opened. By switching to the Task manager using "Ctrl+Alt+Del", the display can be unfrozen but zoom or selection operations a not possible. This problem existed in all previous versions as well and apparently occured in particular on Windows XP.
In certain cases, the closing point of polygons was not created correctly, path segments did not snap correctly to 45 degree edges or partial edit mode was behaving in a strange way.
... which is contrary to what other programs implement.
This happened because many markers have been drawn for such arrays. This has been changed such that the array is not drawn as individual markers for large arrays. Instead, a representative geometrical description is given.
KLayout won't link unless ruby support is enabled (-rblib, -rbinc on build.sh given).
The file names are not stored properly in the config file - thus "open recent" does not work since backslashes are dropped.
Sometimes an error is issued saying that the requested layer already exist (but it does not). Undo support is not implemented correctly.
Under certain circumstances, child cells are shown multiple times in the cell tree, i.e. a cell "A" which is a child of "TOP" might appear multiple times in the tree below "TOP". This is not intended - child cells are supposed to appear just once, even if instantiated multiple times.
If the layers to be saved are confined, i.e. to visibles ones, it may happen that, if no layer is visible for example, all layers are saved instead. A workaround is to create a new layer (i.e. layer 1000, datatype 0) and save it. Such an empty layer will be saved but won't appear in the OASIS or GDS2 file, since it does not contain any shapes.
Depending on the transformation of the text, the text may appear at unexpected locations for example. A workaround is to use the "default" font.
On windows, crashes have been observed, when the program is started the first time after installation. This indicates some problem with Qt installation in the registry. However, this bug was not tracked down yet, because it is not easy to reproduce. Since it only happens once, it is not considered pretty serious.
The program crashes on Windows, if the layer list becomes too small to be displayed. This happens for example, if at the default size of the program window, the color panel, the frame color panel and the stipple panel are opened in that order. Then, the height of the layer list becomes a few pixels and the program crashes.
This problem has been found on the 64bit Ubuntu 7.10 platform for example. The program does not start up and exits immediately with a segmentation fault.
Here is a small patch that fixes that problem:
layApplication.h:53 Application (int &argc, char *argv []); instead of: Application (int argc, char *argv []); layApplication.cc:50 Application::Application (int &argc, char *argv []) instead of: Application::Application (int argc, char *argv [])