MantisBT
Mantis Bug Tracker Workflow

View Issue Details Jump to Notes ] Related Changesets ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0029590Open CASCADE[OCCT] OCCT:Codingpublic2018-03-19 10:062018-06-29 21:19
Reporterabv 
Assigned Tobugmaster 
PrioritynormalSeverityminor 
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version[OCCT] 7.2.0 
Target Version[OCCT] 7.3.0Fixed in Version[OCCT] 7.3.0 
Summary0029590: Coding - avoid usage of Standard_EXPORT attribute for inline methods
DescriptionThere are some places (around 300) where Standard_EXPORT attribute is attached to inline methods of the classes. On Windows this leads to instantiation of these methods as exported within all DLLs whose code includes corresponding header.
Steps To Reproduce1. Generate C++ file including all headers of OCCT (except ones dependent on VTK -- these use export for whole classes...):

cd %CASROOT%/inc
echo "#include <windows.h>" >..\all_includes.cpp
ls -1 *.hxx | grep -i -v "ivtk" | gawk '{print "#include <" $0 ">"}' >>..\all_includes.cpp

2. Build DLL with the only source being that file, and option /FORCE to ensure creation of DLL even if some symbols remain unresolved (this allows to avoid linking with OCCT libs)

3. List all exports of this DLL (excluding constructor and destructor closure symbols generated automatically for unclear reason):

rem Set path to dumpbin.exe if not yet set, on example of VS 2015
set "PATH=%PATH%;%VS140COMNTOOLS%\..\..\VC\BIN"

dumpbin /exports all_includes.dll > all_exports.txt
undname all_exports.txt | grep -v "structor closure" > all_exports_undecorated.txt

The list should be empty
TagsNo tags attached.
Test case numberNot needed
Attached Filestxt file icon all_exports_undecorated.txt (121,899 bytes) 2018-03-19 10:11

- Relationships

-  Notes
(0074621)
abv (manager)
2018-03-19 10:13

Attached file all_exports_undecorated.txt contains list of all exports generated on current master (with fixes for #22651 and 0029589) using the procedure described above (except that headers of old persistence are removed -- they cause some additional problems on linking).
(0074622)
abv (manager)
2018-03-19 10:14

The size of the DLL produced by the above procedure is 136 KB; on a version with about 1/3 of exports eliminated that size is 100 KB.
(0074667)
abv (manager)
2018-03-19 18:34

When exports of all inline methods are eliminated, empty DLL gets reduced to 32 KB in size; it still defines 128 symbols of the kind '...structor closure' generated automatically. I have no idea now why they are generated and how to avoid this.
(0074677)
git (administrator)
2018-03-19 19:40

Branch CR29590 has been created by abv.

SHA-1: 44f526cf60db84a0b517d284071682ac9a871774


Detailed log of new commits:

Author: abv
Date: Mon Mar 19 10:07:06 2018 +0300

    0029590: Coding - avoid usage of Standard_EXPORT attribute for inline methods
    
    All occurrences of Standard_EXPORT attached to inline methods in OCCT code are eliminated.
    Some unused classes and C++ files producing no code are deleted.
(0074678)
abv (manager)
2018-03-19 19:45

Fix is pushed to CR29590, please review.

Note that the effect of this change on the DLLs size is minimal; binaries produced on this branch (based on CR22651) are 61.4 KB vs 61.7 KB on master.
(0074679)
kgv (developer)
2018-03-19 19:49

Patch looks OK.
(0074685)
abv (manager)
2018-03-19 22:06

For tests, see Jenkins job CR29590-master-abv
(0074695)
bugmaster (administrator)
2018-03-20 12:16

Combination -
OCCT branch : CR29590 SHA - 44f526cf60db84a0b517d284071682ac9a871774
Products branch : master SHA - 2f8f449f24696d59603ade3d9a086e77e8b9a304
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian70-64:
OCCT
Total CPU difference: 18142.109999999855 / 18107.97999999989 [+0.19%]
Products
Total CPU difference: 7445.849999999999 / 7427.109999999995 [+0.25%]
Windows-64-VC10:
OCCT
Total CPU difference: 18003.451405998494 / 17842.61437499857 [+0.90%]
Products
Total CPU difference: 8132.129328699942 / 8148.135031299978 [-0.20%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention
(0074875)
git (administrator)
2018-03-24 20:01

Branch CR29590 has been deleted by kgv.

SHA-1: 44f526cf60db84a0b517d284071682ac9a871774

- Related Changesets
occt: master 0f57ab75
Timestamp: 2018-03-19 07:07:06
Author: abv
Committer: bugmaster
Details ] Diff ]
0029590: Coding - avoid usage of Standard_EXPORT attribute for inline methods

All occurrences of Standard_EXPORT attached to inline methods in OCCT code are eliminated.
Some unused classes and C++ files producing no code are deleted.
mod - src/AIS/AIS_ConnectedInteractive.hxx Diff ] File ]
mod - src/AIS/AIS_Dimension.hxx Diff ] File ]
mod - src/AIS/AIS_Manipulator.hxx Diff ] File ]
mod - src/AIS/AIS_ManipulatorOwner.hxx Diff ] File ]
mod - src/Aspect/Aspect_NeutralWindow.hxx Diff ] File ]
mod - src/Bnd/Bnd_B2f.hxx Diff ] File ]
mod - src/BOPAlgo/BOPAlgo_BuilderArea.hxx Diff ] File ]
mod - src/BOPAlgo/BOPAlgo_Builder_2.cxx Diff ] File ]
mod - src/BOPAlgo/BOPAlgo_MakerVolume.hxx Diff ] File ]
mod - src/BOPDS/BOPDS_Curve.hxx Diff ] File ]
mod - src/BOPDS/BOPDS_FaceInfo.hxx Diff ] File ]
mod - src/BOPDS/BOPDS_IndexRange.hxx Diff ] File ]
mod - src/BOPDS/BOPDS_IndexRange.lxx Diff ] File ]
mod - src/BOPDS/BOPDS_Pave.hxx Diff ] File ]
mod - src/BOPDS/BOPDS_Pave.lxx Diff ] File ]
rm - src/BOPTools/BOPTools_DataMapOfShapeSet.hxx Diff ] File ]
rm - src/BOPTools/BOPTools_EdgeSet.hxx Diff ] File ]
rm - src/BOPTools/BOPTools_EdgeSet.lxx Diff ] File ]
rm - src/BOPTools/BOPTools_ListOfEdgeSet.hxx Diff ] File ]
rm - src/BOPTools/BOPTools_ListOfShapeSet.hxx Diff ] File ]
rm - src/BOPTools/BOPTools_ShapeSet.cxx Diff ] File ]
rm - src/BOPTools/BOPTools_ShapeSet.hxx Diff ] File ]
rm - src/BOPTools/BOPTools_ShapeSet.lxx Diff ] File ]
mod - src/BOPTools/FILES Diff ] File ]
mod - src/BRepApprox/BRepApprox_TheMultiLineToolOfApprox.hxx Diff ] File ]
mod - src/BRepClass3d/BRepClass3d_SolidPassiveClassifier.hxx Diff ] File ]
mod - src/BRepExtrema/BRepExtrema_DistanceSS.hxx Diff ] File ]
mod - src/BRepExtrema/BRepExtrema_ExtCC.hxx Diff ] File ]
mod - src/BRepExtrema/BRepExtrema_ExtCF.hxx Diff ] File ]
mod - src/BRepExtrema/BRepExtrema_ExtFF.hxx Diff ] File ]
mod - src/BRepExtrema/BRepExtrema_ExtPC.hxx Diff ] File ]
mod - src/BRepExtrema/BRepExtrema_ExtPF.hxx Diff ] File ]
mod - src/BRepFeat/BRepFeat_MakeDPrism.hxx Diff ] File ]
rm - src/BRepFeat/BRepFeat_MakeDPrism.lxx Diff ] File ]
mod - src/BRepFeat/BRepFeat_SplitShape.hxx Diff ] File ]
mod - src/BRepFeat/FILES Diff ] File ]
mod - src/BRepGProp/BRepGProp_VinertGK.hxx Diff ] File ]
rm - src/BRepGProp/BRepGProp_VinertGK.lxx Diff ] File ]
mod - src/BRepGProp/FILES Diff ] File ]
mod - src/BRepMesh/BRepMesh_Classifier.hxx Diff ] File ]
mod - src/BRepMesh/BRepMesh_DiscretFactory.hxx Diff ] File ]
mod - src/ElCLib/ElCLib.hxx Diff ] File ]
mod - src/ElSLib/ElSLib.hxx Diff ] File ]
mod - src/Geom2dHatch/Geom2dHatch_Hatcher.hxx Diff ] File ]
mod - src/GeometryTest/GeometryTest_DrawableQualifiedCurve2d.hxx Diff ] File ]
mod - src/GeomFill/GeomFill_Pipe.hxx Diff ] File ]
mod - src/GeomInt/GeomInt_TheMultiLineToolOfWLApprox.hxx Diff ] File ]
mod - src/HLRAlgo/HLRAlgo_Coincidence.hxx Diff ] File ]
mod - src/HLRBRep/HLRBRep_LineTool.hxx Diff ] File ]
mod - src/HLRBRep/HLRBRep_SLPropsATool.hxx Diff ] File ]
mod - src/IGESCAFControl/IGESCAFControl_Reader.hxx Diff ] File ]
mod - src/IntPatch/IntPatch_Point.hxx Diff ] File ]
mod - src/IntPatch/IntPatch_PrmPrmIntersection.hxx Diff ] File ]
mod - src/IntPatch/IntPatch_RLine.hxx Diff ] File ]
mod - src/IntPatch/IntPatch_WLine.hxx Diff ] File ]
mod - src/LDOM/LDOM_Element.hxx Diff ] File ]
mod - src/LocOpe/FILES Diff ] File ]
mod - src/LocOpe/LocOpe_Gluer.hxx Diff ] File ]
mod - src/LocOpe/LocOpe_PntFace.hxx Diff ] File ]
rm - src/LocOpe/LocOpe_PntFace.lxx Diff ] File ]
mod - src/MAT/MAT_ListOfBisector.hxx Diff ] File ]
mod - src/MAT/MAT_ListOfEdge.hxx Diff ] File ]
mod - src/math/math_BracketMinimum.hxx Diff ] File ]
mod - src/math/math_FunctionSetRoot.hxx Diff ] File ]
mod - src/math/math_IntegerVector.hxx Diff ] File ]
mod - src/MeshVS/MeshVS_SensitiveQuad.hxx Diff ] File ]
mod - src/NCollection/NCollection_SparseArrayBase.hxx Diff ] File ]
mod - src/NCollection/NCollection_UBTree.hxx Diff ] File ]
mod - src/OpenGl/OpenGl_View.hxx Diff ] File ]
mod - src/Prs3d/Prs3d_PresentationShadow.hxx Diff ] File ]
mod - src/Select3D/Select3D_SensitiveTriangle.hxx Diff ] File ]
mod - src/SelectMgr/SelectMgr_BaseFrustum.hxx Diff ] File ]
mod - src/SelectMgr/SelectMgr_ViewerSelector.hxx Diff ] File ]
mod - src/ShapeFix/ShapeFix_Wire.hxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent.cxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent_Geom.hxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent_Geom2d.cxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent_Geom2d.hxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent_Geom_Curve.cxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent_HSequence.hxx Diff ] File ]
mod - src/ShapePersistent/ShapePersistent_TopoDS.hxx Diff ] File ]
mod - src/ShapeProcess/ShapeProcess_ShapeContext.hxx Diff ] File ]
mod - src/StdLPersistent/StdLPersistent_Data.hxx Diff ] File ]
mod - src/StdLPersistent/StdLPersistent_Document.hxx Diff ] File ]
mod - src/StdLPersistent/StdLPersistent_HString.hxx Diff ] File ]
mod - src/StdLPersistent/StdLPersistent_TreeNode.hxx Diff ] File ]
mod - src/StdLPersistent/StdLPersistent_Void.hxx Diff ] File ]
mod - src/StdObjMgt/StdObjMgt_Attribute.hxx Diff ] File ]
mod - src/StdObjMgt/StdObjMgt_Persistent.hxx Diff ] File ]
mod - src/StdObjMgt/StdObjMgt_SharedObject.hxx Diff ] File ]
mod - src/StdPersistent/StdPersistent_TopLoc.hxx Diff ] File ]
mod - src/StepDimTol/StepDimTol_GeoTolAndGeoTolWthDatRef.hxx Diff ] File ]
mod - src/StepDimTol/StepDimTol_GeoTolAndGeoTolWthDatRefAndGeoTolWthMod.hxx Diff ] File ]
mod - src/StepDimTol/StepDimTol_GeoTolAndGeoTolWthMod.hxx Diff ] File ]
mod - src/StepRepr/StepRepr_CharacterizedRepresentation.hxx Diff ] File ]
mod - src/StepVisual/StepVisual_AnnotationFillAreaOccurrence.hxx Diff ] File ]
mod - src/StepVisual/StepVisual_CameraModelD3MultiClipping.hxx Diff ] File ]
mod - src/StepVisual/StepVisual_CameraModelD3MultiClippingIntersection.hxx Diff ] File ]
mod - src/StepVisual/StepVisual_CameraModelD3MultiClippingUnion.hxx Diff ] File ]
mod - src/Storage/Storage_InternalData.hxx Diff ] File ]
mod - src/TCollection/TCollection_AsciiString.hxx Diff ] File ]
mod - src/TCollection/TCollection_ExtendedString.hxx Diff ] File ]
mod - src/TDF/TDF_Attribute.hxx Diff ] File ]
mod - src/TDF/TDF_Attribute.lxx Diff ] File ]
mod - src/TDF/TDF_Delta.hxx Diff ] File ]
mod - src/TDocStd/TDocStd_Document.hxx Diff ] File ]
mod - src/TFunction/TFunction_Logbook.hxx Diff ] File ]
mod - src/TNaming/TNaming_IteratorOnShapesSet.hxx Diff ] File ]
mod - src/TObj/TObj_Application.hxx Diff ] File ]
mod - src/TObj/TObj_LabelIterator.hxx Diff ] File ]
mod - src/TObj/TObj_Model.hxx Diff ] File ]
mod - src/TObj/TObj_Object.hxx Diff ] File ]
mod - src/TObj/TObj_TIntSparseArray.hxx Diff ] File ]
mod - src/TObj/TObj_TReference.hxx Diff ] File ]
mod - src/TopOpeBRepBuild/TopOpeBRepBuild_FuseFace.hxx Diff ] File ]
mod - src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.hxx Diff ] File ]
mod - src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.hxx Diff ] File ]
mod - src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.hxx Diff ] File ]
mod - src/XCAFView/XCAFView_Object.hxx Diff ] File ]
mod - src/XSControl/XSControl_Reader.hxx Diff ] File ]
mod - src/XSControl/XSControl_TransferWriter.hxx Diff ] File ]

- Issue History
Date Modified Username Field Change
2018-03-19 10:06 abv New Issue
2018-03-19 10:06 abv Assigned To => kgv
2018-03-19 10:11 abv File Added: all_exports_undecorated.txt
2018-03-19 10:13 abv Note Added: 0074621
2018-03-19 10:14 abv Note Added: 0074622
2018-03-19 18:16 abv Steps to Reproduce Updated View Revisions
2018-03-19 18:32 abv Steps to Reproduce Updated View Revisions
2018-03-19 18:34 abv Note Added: 0074667
2018-03-19 18:55 abv Relationship added related to 0022651
2018-03-19 19:40 git Note Added: 0074677
2018-03-19 19:45 abv Note Added: 0074678
2018-03-19 19:45 abv Status new => resolved
2018-03-19 19:45 abv Target Version 7.4.0* => 7.3.0
2018-03-19 19:49 kgv Assigned To kgv => bugmaster
2018-03-19 19:49 kgv Status resolved => reviewed
2018-03-19 19:49 kgv Product Version => 7.2.0
2018-03-19 19:49 kgv Note Added: 0074679
2018-03-19 22:06 abv Note Added: 0074685
2018-03-20 12:16 bugmaster Note Added: 0074695
2018-03-20 12:16 bugmaster Status reviewed => tested
2018-03-20 12:16 bugmaster Test case number => Not needed
2018-03-24 11:51 bugmaster Changeset attached => occt master 0f57ab75
2018-03-24 11:51 bugmaster Status tested => verified
2018-03-24 11:51 bugmaster Resolution open => fixed
2018-03-24 20:01 git Note Added: 0074875
2018-06-29 21:14 user533 Fixed in Version => 7.3.0
2018-06-29 21:19 user533 Status verified => closed


Copyright © 2000 - 2018 MantisBT Team
Powered by Mantis Bugtracker