Bug 193481 - Add 'inline' specifier for declarations for which definitions are defined in separate headers (…Inlines.h)
Summary: Add 'inline' specifier for declarations for which definitions are defined in ...
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Fujii Hironori
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-01-15 19:07 PST by Fujii Hironori
Modified: 2023-08-17 21:12 PDT (History)
0 users

See Also:


Attachments
WIP patch (84.86 KB, patch)
2019-01-15 19:15 PST, Fujii Hironori
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Fujii Hironori 2019-01-15 19:07:27 PST
WebKit is using separate headers (…Inlines.h) for some inline functions.
There was a discussion on it.

  [webkit-dev] …Inlines.h vs …InlineMethods.h
  https://lists.webkit.org/pipermail/webkit-dev/2012-November/022703.html

In certain condition of missing inlucing …Inlines.h, this may cause linkage errors only for Windows port.

  Bug 191626 – REGRESSION(r238039) WebCore::JSDOMGlobalObject::createStructure is using JSC::Structure::create without including StructureInlines.h
  Bug 155657 – JSDOMGlobalObject.h needs to #include StructureInlines.h

To prevent such issues, I'd like to experiment using 'inline' specifier for declarations in this ticket.
Comment 1 Fujii Hironori 2019-01-15 19:15:42 PST
Created attachment 359246 [details]
WIP patch

Added 'inline' specifiers for some declarations.
Comment 2 Fujii Hironori 2019-01-15 19:22:00 PST
This WIP patch reports a lot of warnings such like following. This approach doesn't seem easy as I expected.

> [12/454] Building CXX object Source\JavaScriptCore\CMakeFiles\JavaScriptCore.dir\API\JSStringRefCF.cpp.obj
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
> In file included from ..\..\Source\JavaScriptCore\interpreter\CallFrame.h:30:
> In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:34:
> In file included from ..\..\Source\JavaScriptCore\runtime/ConcurrentJSLock.h:28:
> In file included from ..\..\Source\JavaScriptCore\heap\DeferGC.h:29:
> ..\..\Source\JavaScriptCore\heap\Heap.h(158,17):  warning: inline function 'JSC::Heap::worldIsStopped' is not defined [-Wundefined-inline]
>     inline bool worldIsStopped() const;
>                 ^
> ..\..\Source\JavaScriptCore\heap\Heap.h(159,43):  note: used here
>     bool worldIsRunning() const { return !worldIsStopped(); }
>                                           ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
> In file included from ..\..\Source\JavaScriptCore\heap\SlotVisitor.h:30:
> In file included from ..\..\Source\JavaScriptCore\heap/MarkStack.h:28:
> ..\..\Source\JavaScriptCore\heap/GCSegmentedArray.h(81,17):  warning: inline function 'JSC::GCSegmentedArray<const JSC::JSCell *>::isEmpty' is not defined [-Wundefined-inline]
>     inline bool isEmpty();
>                 ^
> ..\..\Source\JavaScriptCore\heap\SlotVisitor.h(120,46):  note: used here
>     bool isEmpty() { return m_collectorStack.isEmpty() && m_mutatorStack.isEmpty(); }
>                                              ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
> ..\..\Source\JavaScriptCore\runtime/Identifier.h(117,30):  warning: inline function 'JSC::Identifier::fromString' is not defined [-Wundefined-inline]
>     inline static Identifier fromString(VM*, const LChar*, int length);
>                              ^
> ..\..\Source\JavaScriptCore\runtime/Identifier.h(124,84):  note: used here
>     static Identifier fromString(VM* vm, const Vector<LChar>& characters) { return fromString(vm, characters.data(), characters.size()); }
>                                                                                    ^
> ..\..\Source\JavaScriptCore\runtime/Identifier.h(126,30):  warning: inline function 'JSC::Identifier::fromUid' is not defined [-Wundefined-inline]
>     inline static Identifier fromUid(VM*, UniquedStringImpl* uid);
>                              ^
> ..\..\Source\JavaScriptCore\runtime/PropertyNameArray.h(106,53):  note: used here
>     m_data->propertyNameVector().append(Identifier::fromUid(m_vm, identifier));
>                                                     ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
> ..\..\Source\JavaScriptCore\runtime/Identifier.h(121,30):  warning: inline function 'JSC::Identifier::fromString' is not defined [-Wundefined-inline]
>     inline static Identifier fromString(ExecState*, const AtomicString&);
>                              ^
> ..\..\Source\JavaScriptCore\runtime/JSString.h(533,24):  note: used here
>     return Identifier::fromString(exec, toAtomicString(exec));
>                        ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
> ..\..\Source\JavaScriptCore\runtime/Identifier.h(119,30):  warning: inline function 'JSC::Identifier::fromString' is not defined [-Wundefined-inline]
>     inline static Identifier fromString(VM*, const String&);
>                              ^
> ..\..\Source\JavaScriptCore\runtime/JSObject.h(1593,24):  note: used here
>     return Identifier::fromString(&vm, name);
>                        ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
> In file included from ..\..\Source\JavaScriptCore\interpreter\CallFrame.h:30:
> In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:34:
> In file included from ..\..\Source\JavaScriptCore\runtime/ConcurrentJSLock.h:28:
> In file included from ..\..\Source\JavaScriptCore\heap\DeferGC.h:29:
> ..\..\Source\JavaScriptCore\heap\Heap.h(139,23):  warning: inline function 'JSC::Heap::vm' is not defined [-Wundefined-inline]
>     ALWAYS_INLINE VM* vm() const;
>                       ^
> ..\..\Source\JavaScriptCore\heap\LocalAllocatorInlines.h(36,53):  note: used here
>             sanitizeStackForVM(m_directory->heap()->vm());
>                                                     ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
> ..\..\Source\JavaScriptCore\heap\SlotVisitor.h(85,16):  warning: inline function 'JSC::SlotVisitor::vm' is not defined [-Wundefined-inline]
>     inline VM& vm();
>                ^
> ..\..\Source\JavaScriptCore\runtime/JSCellInlines.h(131,55):  note: used here
>     visitor.appendUnbarriered(cell->structure(visitor.vm()));
>                                                       ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
> ..\..\Source\JavaScriptCore\heap\SlotVisitor.h(108,24):  warning: inline function 'JSC::SlotVisitor::appendUnbarriered' is not defined [-Wundefined-inline]
>     ALWAYS_INLINE void appendUnbarriered(JSCell*);
>                        ^
> ..\..\Source\JavaScriptCore\runtime/JSCellInlines.h(131,13):  note: used here
>     visitor.appendUnbarriered(cell->structure(visitor.vm()));
>             ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:29:
> In file included from ..\..\Source\JavaScriptCore\runtime/Error.h:25:
> In file included from ..\..\Source\JavaScriptCore\runtime/ErrorInstance.h:23:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSDestructibleObject.h:28:
> ..\..\Source\JavaScriptCore\runtime/JSObject.h(196,31):  warning: inline function 'JSC::JSObject::putInlineForJSObject' is not defined [-Wundefined-inline]
>     ALWAYS_INLINE static bool putInlineForJSObject(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
>                               ^
> ..\..\Source\JavaScriptCore\runtime/JSCellInlines.h(408,26):  note: used here
>         return JSObject::putInlineForJSObject(asObject(this), exec, propertyName, value, slot);
>                          ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
> In file included from ..\..\Source\JavaScriptCore\interpreter\CallFrame.h:30:
> In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:34:
> In file included from ..\..\Source\JavaScriptCore\runtime/ConcurrentJSLock.h:28:
> In file included from ..\..\Source\JavaScriptCore\heap\DeferGC.h:29:
> ..\..\Source\JavaScriptCore\heap\Heap.h(110,32):  warning: inline function 'JSC::Heap::heap' is not defined [-Wundefined-inline]
>     static ALWAYS_INLINE Heap* heap(const HeapCell*);
>                                ^
> ..\..\Source\JavaScriptCore\runtime\Protect.h(30,11):  note: used here
>     Heap::heap(val)->protect(val);
>           ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:29:
> In file included from ..\..\Source\JavaScriptCore\runtime/Error.h:25:
> In file included from ..\..\Source\JavaScriptCore\runtime/ErrorInstance.h:23:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSDestructibleObject.h:28:
> ..\..\Source\JavaScriptCore\runtime/JSObject.h(602,24):  warning: inline function 'JSC::JSObject::hasOwnProperty' is not defined [-Wundefined-inline]
>     ALWAYS_INLINE bool hasOwnProperty(ExecState*, PropertyName) const;
>                        ^
> ..\..\Source\JavaScriptCore\runtime\JSGlobalObject.h(543,14):  note: used here
>         if (!hasOwnProperty(exec, propertyName))
>              ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:36:
> ..\..\Source\JavaScriptCore\runtime/JSFunction.h(168,12):  warning: inline function 'JSC::JSFunction::JSFunction' is not defined [-Wundefined-inline]
>     inline JSFunction(VM&, FunctionExecutable*, JSScope*, Structure*);
>            ^
> ..\..\Source\JavaScriptCore\runtime/JSFunction.h(186,81):  note: used here
>         JSFunction* function = new (NotNull, allocateCell<JSFunction>(vm.heap)) JSFunction(vm, executable, scope, structure);
>                                                                                 ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
> ..\..\Source\JavaScriptCore\runtime/Identifier.h(128,30):  warning: inline function 'JSC::Identifier::fromUid' is not defined [-Wundefined-inline]
>     inline static Identifier fromUid(const PrivateName&);
>                              ^
> ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h(655,47):  note: used here
>         RELEASE_AND_RETURN(scope, Identifier::fromUid(asSymbol(primitive)->privateName()));
>                                               ^
> In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
> In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:29:
> In file included from ..\..\Source\JavaScriptCore\runtime/Error.h:25:
> In file included from ..\..\Source\JavaScriptCore\runtime/ErrorInstance.h:23:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSDestructibleObject.h:28:
> ..\..\Source\JavaScriptCore\runtime/JSObject.h(175,17):  warning: inline function 'JSC::JSObject::getOwnPropertySlotInline' is not defined [-Wundefined-inline]
>     inline bool getOwnPropertySlotInline(ExecState*, PropertyName, PropertySlot&);
>                 ^
> ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h(896,51):  note: used here
>     RELEASE_AND_RETURN(scope, asObject(asCell())->getOwnPropertySlotInline(exec, propertyName, slot));
>                                                   ^
> 15 warnings generated.
> [13/454] Building CXX object Source\JavaScriptCore\CMakeFiles\JavaScriptCore.dir\__\__\DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp.obj
> In file included from DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp:1:
> In file included from ..\..\Source\JavaScriptCore\API/JSWeakPrivate.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
> In file included from ..\..\Source\JavaScriptCore\heap/SlotVisitor.h:30:
> In file included from ..\..\Source\JavaScriptCore\heap/MarkStack.h:28:
> ..\..\Source\JavaScriptCore\heap/GCSegmentedArray.h(81,17):  warning: inline function 'JSC::GCSegmentedArray<const JSC::JSCell *>::isEmpty' is not defined [-Wundefined-inline]
>     inline bool isEmpty();
>                 ^
> ..\..\Source\JavaScriptCore\heap/SlotVisitor.h(120,46):  note: used here
>     bool isEmpty() { return m_collectorStack.isEmpty() && m_mutatorStack.isEmpty(); }
>                                              ^
> In file included from DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp:1:
> In file included from ..\..\Source\JavaScriptCore\API/JSWeakPrivate.cpp:29:
> In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
> In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
> In file included from ..\..\Source\JavaScriptCore\interpreter/CallFrame.h:30:
> In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:43:
> ..\..\Source\JavaScriptCore\heap\IsoCellSet.h(50,17):  warning: inline function 'JSC::IsoCellSet::remove' is not defined [-Wundefined-inline]
>     inline bool remove(HeapCell* cell); // Returns true if the cell was previously present and got removed.
>                 ^
> ..\..\Source\JavaScriptCore\bytecode\UnlinkedFunctionExecutable.h(118,61):  note: used here
>         vm.unlinkedFunctionExecutableSpace.clearableCodeSet.remove(this);
>                                                             ^
> In file included from DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp:1:
> In file included from ..\..\Source\JavaScriptCore\API/JSWeakPrivate.cpp:30:
> In file included from ..\..\Source\JavaScriptCore\runtime\JSCInlines.h:46:
> In file included from ..\..\Source\JavaScriptCore\runtime/JSFunctionInlines.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime\FunctionExecutable.h:29:
> In file included from ..\..\Source\JavaScriptCore\runtime/ScriptExecutable.h:28:
> In file included from ..\..\Source\JavaScriptCore\runtime/ExecutableBase.h:34:
> In file included from ..\..\Source\JavaScriptCore\bytecode/UnlinkedCodeBlock.h:42:
> ..\..\Source\JavaScriptCore\bytecode/UnlinkedMetadataTable.h(50,26):  warning: inline function 'JSC::UnlinkedMetadataTable::sizeInBytes' is not defined [-Wundefined-inline]
>     ALWAYS_INLINE size_t sizeInBytes();
>                          ^
> ..\..\Source\JavaScriptCore\bytecode/UnlinkedCodeBlock.h(364,27):  note: used here
>         return m_metadata.sizeInBytes();
>                           ^
> 3 warnings generated.
Comment 3 Fujii Hironori 2019-10-09 00:48:14 PDT
Another issue happens.

  Bug 202722 – [Win] error LNK2019: unresolved external symbol "public: __cdecl JSC::Strong<enum JSC::Unknown>::Strong<enum JSC::Unknown>(class JSC::VM &,class JSC::JSValue)"
Comment 4 Fujii Hironori 2019-10-28 03:15:17 PDT
Another issue: Bug 203483 – [Windows][Clang] error LNK2001: unresolved external symbol "void * __cdecl JSC::allocateCell<class JSC::JSGenericTypedArrayView<struct JSC::Float32Adaptor> >(class JSC::Heap &,unsigned __int64)"
Comment 5 Fujii Hironori 2019-11-04 23:43:41 PST
Discussed in bug 203391 comment 14.
Comment 6 Fujii Hironori 2023-08-17 21:12:04 PDT
Pull request: https://github.com/WebKit/WebKit/pull/16822