Bug 195947

Summary: REGRESSION(r243115) breaks build for clang 3.8
Product: WebKit Reporter: Tuti <zrqrrahe>
Component: WebKit Misc.Assignee: Michael Catanzaro <mcatanzaro>
Status: RESOLVED FIXED    
Severity: Normal CC: aestes, benjamin, cdumez, cmarcelo, commit-queue, darin, dbates, ews-watchlist, keith_miller, mark.lam, mcatanzaro, msaboff, saam, webkit-bug-importer, xan.lopez
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://bugs.webkit.org/show_bug.cgi?id=195798
https://bugs.webkit.org/show_bug.cgi?id=195920
Attachments:
Description Flags
The failed build log
none
Patch
none
Patch none

Description Tuti 2019-03-19 08:53:32 PDT
Created attachment 365165 [details]
The failed build log

The failed build log is attached.

It is run with env variables CC=/usr/bin/clang CXX=/usr/bin/clang++

clang versions:

/usr/bin/clang --version
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

/usr/bin/clang++ --version
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Comment 1 Alexey Proskuryakov 2019-03-19 09:23:35 PDT
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_WITH_CMAKE=1 -DBUILDING_WTF -DHAVE_CONFIG_H=1 -I../../Source/bmalloc -I. -IDerivedSources -I../../Source/ThirdParty -I../../Source/WTF -I../../Source/WTF/wtf -I../../Source/WTF/wtf/dtoa -I../../Source/WTF/wtf/persistence -I../../Source/WTF/wtf/text -I../../Source/WTF/wtf/text/icu -I../../Source/WTF/wtf/threads -I../../Source/WTF/wtf/unicode -fno-optimize-sibling-calls -fno-omit-frame-pointer -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -fsanitize=address -gsplit-dwarf -g -fPIC -MMD -MT Source/WTF/wtf/CMakeFiles/WTF.dir/DateMath.cpp.o -MF Source/WTF/wtf/CMakeFiles/WTF.dir/DateMath.cpp.o.d -o Source/WTF/wtf/CMakeFiles/WTF.dir/DateMath.cpp.o -c ../../Source/WTF/wtf/DateMath.cpp
In file included from ../../Source/WTF/wtf/DateMath.cpp:73:
In file included from ../../Source/WTF/wtf/DateMath.h:50:
In file included from ../../Source/WTF/wtf/text/WTFString.h:713:
In file included from ../../Source/WTF/wtf/text/AtomicString.h:377:
../../Source/WTF/wtf/text/StringConcatenate.h:281:16: error: no viable conversion from returned value of type 'RefPtr<WTF::StringImpl>' to function return type 'WTF::String'
        return resultImpl;
               ^~~~~~~~~~
Comment 2 Xan Lopez 2019-03-19 09:55:44 PDT
I am guessing the std::move in WTFMove was redundant, but some of the other extra stuff made the ctors in WTFString.h work in clang 3.8, and now we fail? Somehow it seemingly works in other compilers though.
Comment 3 Xan Lopez 2019-03-19 10:13:26 PDT
(In reply to Xan Lopez from comment #2)
> I am guessing the std::move in WTFMove was redundant, but some of the other
> extra stuff made the ctors in WTFString.h work in clang 3.8, and now we
> fail? Somehow it seemingly works in other compilers though.

One guess is the std::forward call happening in move specialization in StdLibExtras.h, which could be forwarding the lvalue to match the WTFString ctor which takes a RefPtr<StringImpl>&&.
Comment 4 Xan Lopez 2019-03-19 10:48:24 PDT
(In reply to Xan Lopez from comment #3)
> (In reply to Xan Lopez from comment #2)
> > I am guessing the std::move in WTFMove was redundant, but some of the other
> > extra stuff made the ctors in WTFString.h work in clang 3.8, and now we
> > fail? Somehow it seemingly works in other compilers though.
> 
> One guess is the std::forward call happening in move specialization in
> StdLibExtras.h, which could be forwarding the lvalue to match the WTFString
> ctor which takes a RefPtr<StringImpl>&&.

Adding std::forward<RefPtr<StringImpl>> fixes the build with clang 3.8, I asked someone with access to that to test it for me. My question now would be why it's not needed in newer clang versions, and whether that's safe to do regardless.
Comment 5 Michael Catanzaro 2019-03-19 10:49:15 PDT
I was going to suggest:

    return resultImpl.copyRef();

which is less mysterious.
Comment 6 Michael Catanzaro 2019-03-19 10:51:54 PDT
Note clang 3.8 is *really* old, July 2016. How far back does Apple support old clang versions?
Comment 7 Xan Lopez 2019-03-19 10:57:58 PDT
(In reply to Michael Catanzaro from comment #5)
> I was going to suggest:
> 
>     return resultImpl.copyRef();
> 
> which is less mysterious.

My colleague tells me the build was already broken with clang 3.8 FWIW. Not that we should not fix this, but it seems there were already other issues. Should not at least one bot run the minimum required clang version?
Comment 8 Michael Catanzaro 2019-03-19 13:01:48 PDT
Or maybe:

return String { resultImpl };

I'll try to reland this in bug #195920, to keep everything together.
Comment 9 Michael Catanzaro 2019-03-19 13:03:45 PDT
(In reply to Michael Catanzaro from comment #8)
> I'll try to reland this in bug #195920, to keep everything together.

Oh sorry, I thought you had done a rollout. Nevermind that.
Comment 10 Michael Catanzaro 2019-03-19 13:05:43 PDT
(In reply to Michael Catanzaro from comment #8)
> Or maybe:
> 
> return String { resultImpl };

Would have to be:

return String { WTFMove(resultImpl) };
Comment 11 Michael Catanzaro 2019-03-19 13:13:09 PDT
Created attachment 365217 [details]
Patch
Comment 12 Michael Catanzaro 2019-03-19 13:14:17 PDT
Tuti, does that work?

(In reply to Michael Catanzaro from comment #6)
> Note clang 3.8 is *really* old, July 2016. How far back does Apple support
> old clang versions?

Really interested in the answer to this.
Comment 13 Tuti 2019-03-20 00:57:22 PDT
Unfortunately not:

+  cmake --build /fuzzing/WebKit/WebKitBuild/Debug --config Debug -- 
[1023/1457] Building CXX object Source/WTF/wtf/CMakeFiles/WTF.dir/MetaAllocator.cpp.o
FAILED: Source/WTF/wtf/CMakeFiles/WTF.dir/MetaAllocator.cpp.o 
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_WITH_CMAKE=1 -DBUILDING_WTF -DHAVE_CONFIG_H=1 -I../../Source/bmalloc -I. -IDerivedSources -I../../Source/ThirdParty -I../../Source/WTF -I../../Source/WTF/wtf -I../../Source/WTF/wtf/dtoa -I../../Source/WTF/wtf/persistence -I../../Source/WTF/wtf/text -I../../Source/WTF/wtf/text/icu -I../../Source/WTF/wtf/threads -I../../Source/WTF/wtf/unicode -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC -MMD -MT Source/WTF/wtf/CMakeFiles/WTF.dir/MetaAllocator.cpp.o -MF Source/WTF/wtf/CMakeFiles/WTF.dir/MetaAllocator.cpp.o.d -o Source/WTF/wtf/CMakeFiles/WTF.dir/MetaAllocator.cpp.o -c ../../Source/WTF/wtf/MetaAllocator.cpp
../../Source/WTF/wtf/MetaAllocator.cpp:197:12: error: no viable conversion from returned value of type 'WTF::Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> >' to function return type 'RefPtr<WTF::MetaAllocatorHandle>'
    return handle;
           ^~~~~~
../../Source/WTF/wtf/RefPtr.h:57:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> >' to 'WTF::MetaAllocatorHandle *' for 1st argument
    ALWAYS_INLINE RefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
                  ^
../../Source/WTF/wtf/RefPtr.h:58:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> >' to 'const WTF::RefPtr<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> > &' for 1st argument
    ALWAYS_INLINE RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                  ^
../../Source/WTF/wtf/RefPtr.h:61:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> >' to 'WTF::RefPtr<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> > &&' for 1st argument
    ALWAYS_INLINE RefPtr(RefPtr&& o) : m_ptr(o.leakRef()) { }
                  ^
../../Source/WTF/wtf/RefPtr.h:63:38: note: candidate constructor [with X = WTF::MetaAllocatorHandle, Y = WTF::DumbPtrTraits<WTF::MetaAllocatorHandle>] not viable: no known conversion from 'WTF::Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> >' to 'Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> > &&' for 1st argument
    template<typename X, typename Y> RefPtr(Ref<X, Y>&&);
                                     ^
../../Source/WTF/wtf/RefPtr.h:66:5: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::MetaAllocatorHandle, WTF::DumbPtrTraits<WTF::MetaAllocatorHandle> >' to 'WTF::HashTableDeletedValueType' for 1st argument
    RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
    ^
../../Source/WTF/wtf/RefPtr.h:59:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(const RefPtr<X, Y>& o) : m_ptr(o.get()) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                                     ^
../../Source/WTF/wtf/RefPtr.h:62:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(RefPtr<X, Y>&& o) : m_ptr(o.leakRef()) { }
                                     ^
../../Source/WTF/wtf/Ref.h:122:5: note: candidate function
    operator T&() const { ASSERT(m_ptr); return *PtrTraits::unwrap(m_ptr); }
    ^
1 error generated.
[1040/1457] Building CXX object Source/WTF/wtf/CMakeFiles/WTF.dir/ParkingLot.cpp.o
ninja: build stopped: subcommand failed.
Comment 14 Tuti 2019-03-20 01:14:30 PDT
Excuse me, the patch does work.

It is this newer commit that breaks the build again:
https://bugs.webkit.org/show_bug.cgi?id=195920
Comment 15 Xan Lopez 2019-03-20 02:20:58 PDT
(In reply to Tuti from comment #14)
> Excuse me, the patch does work.
> 
> It is this newer commit that breaks the build again:
> https://bugs.webkit.org/show_bug.cgi?id=195920

And like I said, apparently the build was already broken before any of this. If clang 3.8 is supposed to build WebKit we need a buildbot that uses it, otherwise this is an impossible task.
Comment 16 Tuti 2019-03-20 02:35:50 PDT
I have been building with clang 3.8 for the past 6 months with no issues till now.

The two commits that broke the build happened in the past couple of days.

I certainly agree a build bot is a fantastic idea.
Comment 17 Darin Adler 2019-03-20 07:20:23 PDT
Whatever we do to solve this, please don’t add copyRef; that’s literally the opposite of what we are trying accomplish, adding reference count churn that we try to avoid by moving instead of copying smart pointers.
Comment 18 Darin Adler 2019-03-20 07:21:58 PDT
Seems clear that if we are trying to fix a warning in one compiler in a way that creates an error in another that we should back this out.

Apple's current use of TOT WebKit requires support from older clang versions about 2-3 years back. You can get a more precise answer from someone else.
Comment 19 Michael Catanzaro 2019-03-20 10:32:57 PDT
(In reply to Darin Adler from comment #18)
> Seems clear that if we are trying to fix a warning in one compiler in a way
> that creates an error in another that we should back this out.

Depends, is clang 3.8 support required? If so, then yes of course, but it doesn't seem so. Apple internal builds are presumably happy, or we'd have done a rollout by now, right? So I suspect you are not using clang 3.8 anywhere. Fixing builds with old compilers is really time-consuming and annoying, so we have a policy that it's OK to break GCC 5 or older, but GCC 6 must still work (for now). That way we know exactly what is required to work. We don't have any guidelines for old versions of clang, though, so breaking clang 3.8 is fine for us.

Anyway, we have several alternatives:

 * Use IGNORE_WARNINGS in these spots, but this would be needed in dozens of places (or hundreds of places if we revert my patch)
 * Build with -Wno-redundant-move, but this prevents us from detecting these issues and improving the WebKit codebase
 * Make it work for clang 3.8 using the idiom return Foo { WTFMove(foo) }; as demonstrated in this patch

I'll try Foo { WTFMove(foo) }; for now. This is only needed when the return value undergoes a type conversion, e.g. here we are trying to convert from Ref<> to RefPtr<>, that's why clang 3.8 complains. So only a small minority of removed WTFMoves() are likely to break clang 3.8 and we can probably tackle them as Tuti reports them. I'll update this patch for MetaAllocator.cpp now, and Tuti can report back if it's sufficient.

Note: one of Igalia's developers tested a clang 3.8 build yesterday and reported that it was already broken before Xan's patch (so before mine as well) so I guess whether it works must be dependent on build options.
Comment 20 Chris Dumez 2019-03-20 10:36:27 PDT
Comment on attachment 365217 [details]
Patch

Seems fine.
Comment 21 Michael Catanzaro 2019-03-20 11:02:56 PDT
Committed r243215: <https://trac.webkit.org/changeset/243215>
Comment 22 Michael Catanzaro 2019-03-20 11:03:43 PDT
Committed r243216: <https://trac.webkit.org/changeset/243216>
Comment 23 Radar WebKit Bug Importer 2019-03-20 11:03:45 PDT
<rdar://problem/49069219>
Comment 24 Tuti 2019-03-21 04:10:11 PDT
(In reply to Michael Catanzaro from comment #19)
> I'll try Foo { WTFMove(foo) }; for now. This is only needed when the return
> value undergoes a type conversion, e.g. here we are trying to convert from
> Ref<> to RefPtr<>, that's why clang 3.8 complains. So only a small minority
> of removed WTFMoves() are likely to break clang 3.8 and we can probably
> tackle them as Tuti reports them. I'll update this patch for
> MetaAllocator.cpp now, and Tuti can report back if it's sufficient.

Thanks a lot for the work!

The build now crashes as so:

[1307/1458] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -I../../Source/bmalloc -IDerivedSources -I../../Source/ThirdParty -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC   -ffp-contract=off -MMD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp:3:
../../Source/JavaScriptCore/bindings/ScriptValue.cpp:77:20: error: no viable conversion from returned value of type 'WTF::Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> >' to function return type 'RefPtr<JSON::Value>'
            return inspectorArray;
                   ^~~~~~~~~~~~~~
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:57:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> >' to 'WTF::JSONImpl::Value *' for 1st argument
    ALWAYS_INLINE RefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:58:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> >' to 'const WTF::RefPtr<WTF::JSONImpl::Value, WTF::DumbPtrTraits<WTF::JSONImpl::Value> > &' for 1st argument
    ALWAYS_INLINE RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:61:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> >' to 'WTF::RefPtr<WTF::JSONImpl::Value, WTF::DumbPtrTraits<WTF::JSONImpl::Value> > &&' for 1st argument
    ALWAYS_INLINE RefPtr(RefPtr&& o) : m_ptr(o.leakRef()) { }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:63:38: note: candidate constructor [with X = WTF::JSONImpl::Array, Y = WTF::DumbPtrTraits<WTF::JSONImpl::Array>] not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> >' to 'Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> > &&' for 1st argument
    template<typename X, typename Y> RefPtr(Ref<X, Y>&&);
                                     ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:66:5: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Array, WTF::DumbPtrTraits<WTF::JSONImpl::Array> >' to 'WTF::HashTableDeletedValueType' for 1st argument
    RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
    ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:59:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(const RefPtr<X, Y>& o) : m_ptr(o.get()) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                                     ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:62:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(RefPtr<X, Y>&& o) : m_ptr(o.leakRef()) { }
                                     ^
DerivedSources/ForwardingHeaders/wtf/Ref.h:122:5: note: candidate function
    operator T&() const { ASSERT(m_ptr); return *PtrTraits::unwrap(m_ptr); }
    ^
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-da3fe922-1.cpp:3:
../../Source/JavaScriptCore/bindings/ScriptValue.cpp:90:16: error: no viable conversion from returned value of type 'WTF::Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> >' to function return type 'RefPtr<JSON::Value>'
        return inspectorObject;
               ^~~~~~~~~~~~~~~
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:57:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> >' to 'WTF::JSONImpl::Value *' for 1st argument
    ALWAYS_INLINE RefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:58:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> >' to 'const WTF::RefPtr<WTF::JSONImpl::Value, WTF::DumbPtrTraits<WTF::JSONImpl::Value> > &' for 1st argument
    ALWAYS_INLINE RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:61:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> >' to 'WTF::RefPtr<WTF::JSONImpl::Value, WTF::DumbPtrTraits<WTF::JSONImpl::Value> > &&' for 1st argument
    ALWAYS_INLINE RefPtr(RefPtr&& o) : m_ptr(o.leakRef()) { }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:63:38: note: candidate constructor [with X = WTF::JSONImpl::Object, Y = WTF::DumbPtrTraits<WTF::JSONImpl::Object>] not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> >' to 'Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> > &&' for 1st argument
    template<typename X, typename Y> RefPtr(Ref<X, Y>&&);
                                     ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:66:5: note: candidate constructor not viable: no known conversion from 'WTF::Ref<WTF::JSONImpl::Object, WTF::DumbPtrTraits<WTF::JSONImpl::Object> >' to 'WTF::HashTableDeletedValueType' for 1st argument
    RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
    ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:59:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(const RefPtr<X, Y>& o) : m_ptr(o.get()) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                                     ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:62:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(RefPtr<X, Y>&& o) : m_ptr(o.leakRef()) { }
                                     ^
DerivedSources/ForwardingHeaders/wtf/Ref.h:122:5: note: candidate function
    operator T&() const { ASSERT(m_ptr); return *PtrTraits::unwrap(m_ptr); }
    ^
2 errors generated.
[1312/1458] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -I../../Source/bmalloc -IDerivedSources -I../../Source/ThirdParty -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC   -ffp-contract=off -MMD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-6.cpp:8:
../../Source/JavaScriptCore/bytecode/InstanceOfAccessCase.cpp:50:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::InstanceOfAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<InstanceOfAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<InstanceOfAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::InstanceOfAccessCase, _Ep = std::default_delete<JSC::InstanceOfAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<InstanceOfAccessCase>' to 'unique_ptr<JSC::InstanceOfAccessCase, std::default_delete<JSC::InstanceOfAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<InstanceOfAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
1 error generated.
[1314/1458] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -I../../Source/bmalloc -IDerivedSources -I../../Source/ThirdParty -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC   -ffp-contract=off -MMD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp:8:
../../Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp:69:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::GetterSetterAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::GetterSetterAccessCase, _Ep = std::default_delete<JSC::GetterSetterAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'unique_ptr<JSC::GetterSetterAccessCase, std::default_delete<JSC::GetterSetterAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp:8:
../../Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp:79:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::GetterSetterAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::GetterSetterAccessCase, _Ep = std::default_delete<JSC::GetterSetterAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'unique_ptr<JSC::GetterSetterAccessCase, std::default_delete<JSC::GetterSetterAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-5.cpp:8:
../../Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp:100:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::GetterSetterAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::GetterSetterAccessCase, _Ep = std::default_delete<JSC::GetterSetterAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'unique_ptr<JSC::GetterSetterAccessCase, std::default_delete<JSC::GetterSetterAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<GetterSetterAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
3 errors generated.
[1322/1458] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -I../../Source/bmalloc -IDerivedSources -I../../Source/ThirdParty -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC   -ffp-contract=off -MMD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-7.cpp:4:
../../Source/JavaScriptCore/bytecode/IntrinsicGetterAccessCase.cpp:54:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::IntrinsicGetterAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<IntrinsicGetterAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<IntrinsicGetterAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::IntrinsicGetterAccessCase, _Ep = std::default_delete<JSC::IntrinsicGetterAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<IntrinsicGetterAccessCase>' to 'unique_ptr<JSC::IntrinsicGetterAccessCase, std::default_delete<JSC::IntrinsicGetterAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<IntrinsicGetterAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
1 error generated.
[1323/1458] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -I../../Source/bmalloc -IDerivedSources -I../../Source/ThirdParty -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC   -ffp-contract=off -MMD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-8.cpp:2:
../../Source/JavaScriptCore/bytecode/ModuleNamespaceAccessCase.cpp:61:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::ModuleNamespaceAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<ModuleNamespaceAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<ModuleNamespaceAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::ModuleNamespaceAccessCase, _Ep = std::default_delete<JSC::ModuleNamespaceAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<ModuleNamespaceAccessCase>' to 'unique_ptr<JSC::ModuleNamespaceAccessCase, std::default_delete<JSC::ModuleNamespaceAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<ModuleNamespaceAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
1 error generated.
[1324/1458] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINKED_WITH_WTF -IDerivedSources/ForwardingHeaders -I. -I../../Source/JavaScriptCore -I../../Source/JavaScriptCore/API -I../../Source/JavaScriptCore/assembler -I../../Source/JavaScriptCore/b3 -I../../Source/JavaScriptCore/b3/air -I../../Source/JavaScriptCore/bindings -I../../Source/JavaScriptCore/builtins -I../../Source/JavaScriptCore/bytecode -I../../Source/JavaScriptCore/bytecompiler -I../../Source/JavaScriptCore/dfg -I../../Source/JavaScriptCore/disassembler -I../../Source/JavaScriptCore/disassembler/ARM64 -I../../Source/JavaScriptCore/disassembler/udis86 -I../../Source/JavaScriptCore/domjit -I../../Source/JavaScriptCore/ftl -I../../Source/JavaScriptCore/heap -I../../Source/JavaScriptCore/debugger -I../../Source/JavaScriptCore/inspector -I../../Source/JavaScriptCore/inspector/agents -I../../Source/JavaScriptCore/inspector/augmentable -I../../Source/JavaScriptCore/inspector/remote -I../../Source/JavaScriptCore/interpreter -I../../Source/JavaScriptCore/jit -I../../Source/JavaScriptCore/llint -I../../Source/JavaScriptCore/parser -I../../Source/JavaScriptCore/profiler -I../../Source/JavaScriptCore/runtime -I../../Source/JavaScriptCore/tools -I../../Source/JavaScriptCore/wasm -I../../Source/JavaScriptCore/wasm/js -I../../Source/JavaScriptCore/yarr -IDerivedSources/JavaScriptCore -IDerivedSources/JavaScriptCore/inspector -IDerivedSources/JavaScriptCore/runtime -IDerivedSources/JavaScriptCore/yarr -I../../Source/bmalloc -IDerivedSources -I../../Source/ThirdParty -fdiagnostics-color=always -fcolor-diagnostics -Wextra -Wall -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align  -fno-strict-aliasing -fno-exceptions -fno-rtti -std=c++14 -gsplit-dwarf -g -fPIC   -ffp-contract=off -MMD -MT Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp.o -MF Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp.o.d -o Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp.o -c DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-f0a787a9-9.cpp:5:
../../Source/JavaScriptCore/bytecode/ProxyableAccessCase.cpp:55:12: error: no viable conversion from returned value of type 'unique_ptr<JSC::ProxyableAccessCase>' to function return type 'unique_ptr<JSC::AccessCase>'
    return result;
           ^~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:200:17: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<ProxyableAccessCase>' to 'nullptr_t' for 1st argument
      constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
                ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:205:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<ProxyableAccessCase>' to 'std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &&' for 1st argument
      unique_ptr(unique_ptr&& __u) noexcept
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:220:2: note: candidate constructor [with _Up = JSC::ProxyableAccessCase, _Ep = std::default_delete<JSC::ProxyableAccessCase>, $2 = void] not viable: no known conversion from 'std::unique_ptr<ProxyableAccessCase>' to 'unique_ptr<JSC::ProxyableAccessCase, std::default_delete<JSC::ProxyableAccessCase> > &&' for 1st argument
        unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: candidate constructor not viable: no known conversion from 'std::unique_ptr<ProxyableAccessCase>' to 'const std::unique_ptr<JSC::AccessCase, std::default_delete<JSC::AccessCase> > &' for 1st argument
      unique_ptr(const unique_ptr&) = delete;
      ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:228:2: note: candidate template ignored: could not match 'auto_ptr' against 'unique_ptr'
        unique_ptr(auto_ptr<_Up>&& __u) noexcept;
        ^
1 error generated.
ninja: build stopped: subcommand failed.
Comment 25 Michael Catanzaro 2019-03-21 13:47:39 PDT
Committed r243323: <https://trac.webkit.org/changeset/243323>
Comment 26 Tuti 2019-03-24 01:41:42 PDT
Almost there :) 🙏🏻

[1371/1460] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-84c9f43f-5.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/__/__/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-84c9f43f-5.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINp
In file included from DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-84c9f43f-5.cpp:2:
../../Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:419:12: error: no viable conversion from returned value of type 'WTF::Ref<Ins'
    return location;
           ^~~~~~~~
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:57:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<Inspector::Protocol::t
    ALWAYS_INLINE RefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:58:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<Inspector::Protocol::t
    ALWAYS_INLINE RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:61:19: note: candidate constructor not viable: no known conversion from 'WTF::Ref<Inspector::Protocol::t
    ALWAYS_INLINE RefPtr(RefPtr&& o) : m_ptr(o.leakRef()) { }
                  ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:63:38: note: candidate constructor [with X = Inspector::Protocol::Debugger::Location, Y = WTF::DumbPtrTt
    template<typename X, typename Y> RefPtr(Ref<X, Y>&&);
                                     ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:66:5: note: candidate constructor not viable: no known conversion from 'WTF::Ref<Inspector::Protocol::Dt
    RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
    ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:59:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(const RefPtr<X, Y>& o) : m_ptr(o.get()) { refIfNotNull(PtrTraits::unwrap(m_ptr)); }
                                     ^
DerivedSources/ForwardingHeaders/wtf/RefPtr.h:62:38: note: candidate template ignored: could not match 'RefPtr' against 'Ref'
    template<typename X, typename Y> RefPtr(RefPtr<X, Y>&& o) : m_ptr(o.leakRef()) { }
                                     ^
DerivedSources/ForwardingHeaders/wtf/Ref.h:122:5: note: candidate function
    operator T&() const { ASSERT(m_ptr); return *PtrTraits::unwrap(m_ptr); }
    ^
1 error generated.
[1379/1460] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/wasm/WasmAirIRGenerator.cpp.o
FAILED: Source/JavaScriptCore/CMakeFiles/JavaScriptCore.dir/wasm/WasmAirIRGenerator.cpp.o
/usr/bin/clang++   -DBUILDING_JSCONLY__ -DBUILDING_JavaScriptCore -DBUILDING_WITH_CMAKE=1 -DHAVE_CONFIG_H=1 -DJavaScriptCore_EXPORTS -DSTATICALLY_LINp
In file included from ../../Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:27:
In file included from ../../Source/JavaScriptCore/wasm/WasmAirIRGenerator.h:30:
In file included from ../../Source/JavaScriptCore/wasm/WasmB3IRGenerator.h:30:
In file included from ../../Source/JavaScriptCore/b3/B3Common.h:31:
In file included from ../../Source/JavaScriptCore/jit/GPRInfo.h:28:
In file included from ../../Source/JavaScriptCore/assembler/MacroAssembler.h:30:
In file included from ../../Source/JavaScriptCore/runtime/JSCJSValue.h:36:
In file included from DerivedSources/ForwardingHeaders/wtf/MediaTime.h:32:
In file included from DerivedSources/ForwardingHeaders/wtf/JSONValues.h:36:
In file included from DerivedSources/ForwardingHeaders/wtf/text/StringHash.h:25:
In file included from DerivedSources/ForwardingHeaders/wtf/text/AtomicString.h:25:
In file included from DerivedSources/ForwardingHeaders/wtf/text/AtomicStringImpl.h:23:
In file included from DerivedSources/ForwardingHeaders/wtf/text/UniquedStringImpl.h:28:
In file included from DerivedSources/ForwardingHeaders/wtf/text/StringImpl.h:29:
DerivedSources/ForwardingHeaders/wtf/Expected.h:268:61: error: call to deleted constructor of 'value_type' (aka 'std::unique_ptr<JSC::Wasm::InternalF)
    constexpr storage(value_tag_t, const value_type& val) : val(val) { }
                                                            ^   ~~~
DerivedSources/ForwardingHeaders/wtf/Expected.h:329:62: note: in instantiation of member function 'std::experimental::fundamentals_v3::__expected_dete
    constexpr base(value_tag_t tag, const value_type& val) : s(tag, val), has(true) { }
                                                             ^
DerivedSources/ForwardingHeaders/wtf/Expected.h:435:47: note: in instantiation of member function 'std::experimental::fundamentals_v3::__expected_dete
    constexpr expected(const value_type& e) : base(__expected_detail::value_tag, e) { }
                                              ^
../../Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1975:12: note: in instantiation of member function 'std::experimental::fundamentals_v3::expece
    return result;
           ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:356:7: note: 'unique_ptr' has been explicitly marked delete
      unique_ptr(const unique_ptr&) = delete;
      ^
1 error generated.
[1388/1460] Building CXX object Source/JavaScriptCore/CMakeFiles/JavaScri...ivedSources/JavaScriptCore/unified-sources/UnifiedSource-95324de6-1.cpp.o
ninja: build stopped: subcommand failed.
Comment 27 Michael Catanzaro 2019-03-24 10:03:57 PDT
You're building only JSC?

At this point I really think we should just drop clang 3.8, especially if it will only work for JSC. Fixing two more returns is no big deal, but there are another 72 build targets remaining. Can you try following the pattern I've shown in the above commits to see how many more changes are required to build?

You just have to change:

  return foo;

To:

  return ReturnType { WTFMove(foo) };

That pattern holds for all cases so far. E.g.:

diff --git a/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp b/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp
index 7e3dc65e645..4916edbc6b8 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp
+++ b/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp
@@ -416,7 +416,7 @@ static RefPtr<Protocol::Debugger::Location> buildDebuggerLocation(const JSC::Bre
         .release();
     location->setColumnNumber(breakpoint.column);
 
-    return location;
+    return RefPtr<Protocol::Debugger::Location> { WTFMove(location) };
 }
 
 static bool parseLocation(ErrorString& errorString, const JSON::Object& location, JSC::SourceID& sourceID, unsigned& lineNumber, unsigned& columnNumber)
diff --git a/Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp b/Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp
index e1751196f93..910383651ae 100644
--- a/Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp
+++ b/Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp
@@ -1972,7 +1972,7 @@ Expected<std::unique_ptr<InternalFunction>, String> parseAndCompileAir(Compilati
         result->entrypoint.calleeSaveRegisters = code.calleeSaveRegisterAtOffsetList();
     }
 
-    return result;
+    return Expected<std::unique_ptr<InternalFunction> String> { WTFMove(result) };
 }
 
 template <typename IntType>
Comment 28 Michael Catanzaro 2019-03-24 10:05:21 PDT
(In reply to Michael Catanzaro from comment #27)
> -    return result;
> +    return Expected<std::unique_ptr<InternalFunction> String> {
> WTFMove(result) };

Actually I missed a comma there, should be:

> -    return result;
> +    return Expected<std::unique_ptr<InternalFunction>, String> {
> WTFMove(result) };
Comment 29 Alexey Proskuryakov 2019-03-25 09:57:50 PDT
> Note clang 3.8 is *really* old, July 2016. How far back does Apple support old clang versions?

The oldest version that we need to support is what EWS and older macOS bots build with. I don't know how to convert version numbers though, "clang --version" says "Apple LLVM version 9.1.0 (clang-902.0.39.1)".
Comment 30 Michael Catanzaro 2019-03-25 10:08:47 PDT
I think that's clang 9 (current development version). clang 8 was just released.
Comment 31 Michael Catanzaro 2019-04-01 06:21:37 PDT
(In reply to Michael Catanzaro from comment #27)
> You're building only JSC?
> 
> At this point I really think we should just drop clang 3.8, especially if it
> will only work for JSC. Fixing two more returns is no big deal, but there
> are another 72 build targets remaining. Can you try following the pattern
> I've shown in the above commits to see how many more changes are required to
> build?

For now I plan to revert these partial fixes, since they don't fix the build with clang 3.8 and they make the code worse.

If we really want to support building JSC with clang 3.8, we could do that once we know how many more return statements need to be changed.

Seems building WebKit itself was already broken, and it's surely impractical to avoid that now.
Comment 32 Michael Catanzaro 2019-04-01 08:32:18 PDT
Created attachment 366397 [details]
Patch
Comment 33 Darin Adler 2019-04-01 08:35:25 PDT
To follow up, for clarity, we can put some minimum clang build version checking in Compiler.h. Don’t we already have minimum gcc build checking there?
Comment 34 Michael Catanzaro 2019-04-01 10:00:49 PDT
(In reply to Darin Adler from comment #33)
> To follow up, for clarity, we can put some minimum clang build version
> checking in Compiler.h. Don’t we already have minimum gcc build checking
> there?

I had to do some searching, but the check is only in CMakeLists.txt now:

https://trac.webkit.org/changeset/231152/webkit

That's a better place, since that fails much earlier than Compiler.h. I could add a similar check for Clang if I knew the min version that actually worked, but it'd have to be duplicated for XCode and the CMake check might not be maintained very well.

Currently we have:

if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang")
    set(COMPILER_IS_CLANG ON)
endif ()

if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
    if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS "6.0.0")
        message(FATAL_ERROR "GCC 6.0.0 is required to build WebKitGTK+, use a newer GCC version or clang")
    endif ()
endif ()

Would be easy to add a Clang check there. Should probably also remove WebKitGTK+ from the error message as that code runs for every port....
Comment 35 WebKit Commit Bot 2019-04-01 10:27:58 PDT
Comment on attachment 366397 [details]
Patch

Clearing flags on attachment: 366397

Committed r243697: <https://trac.webkit.org/changeset/243697>
Comment 36 WebKit Commit Bot 2019-04-01 10:28:00 PDT
All reviewed patches have been landed.  Closing bug.