chakra-core/ChakraCore

Chakra failed to build with MSVC + permissive- on windows

Open

#4,902 创建于 2018年3月29日

在 GitHub 查看
 (2 评论) (0 反应) (0 负责人)JavaScript (1,374 fork)batch import
Codebase Qualityhelp wanted

仓库指标

Star
 (9,000 star)
PR 合并指标
 (30 天内没有已合并 PR)

描述

Chakra failed with error C3861 when build with permissive- on Windows, I use latest source on master branch. Could you please help take a look at this? Noted that this issue only found when compiles with unreleased vctoolset, that next release of MSVC will have this behavior. You can repro this issue as the steps below:

  1. git clone -c core.autocrlf=true https://github.com/microsoft/ChakraCore D:\Chakra\src
  2. Open a clean x86 prompt and browse to D:\Chakra\src
  3. set CL=-wd4471 /permissive-
  4. msbuild /m /p:Platform=x86 /p:Configuration=Test /p:WindowsTargetPlatformVersion=10.0.16299.0 Build\Chakra.Core.sln /t:Rebuild

Failure like:

"D:\Chakra\src\Build\Chakra.Core.sln" (Rebuild target) (1) -> "D:\Chakra\src\Build..\bin\ChakraCore\ChakraCore.vcxproj.metaproj" (Rebuild target) (2) -> "D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj" (Rebuild target) (6) -> d:\chakra\src\lib\common\datastructures\basedictionary.h(1452,33): error C3861: 'ValueToKey': identifier not found [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1452,33): error C3861: return __super::Add(ValueToKey<TKey, TElement>::ToKey(element), element); [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1452,33): error C3861: ^ [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1458,36): error C3861: 'ValueToKey': identifier not found [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1458,36): error C3861: return __super::AddNew(ValueToKey<TKey, TElement>::ToKey(element), element); [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1458,36): error C3861: ^ [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1463,34): error C3861: 'ValueToKey': identifier not found [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1463,34): error C3861: return __super::Item(ValueToKey<TKey, TElement>::ToKey(element), element); [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1463,34): error C3861: ^ [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1491,32): error C3861: 'ValueToKey': identifier not found [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1491,32): error C3861: return ContainsKey(ValueToKey<TKey, TElement>::ToKey(element)); [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1491,32): error C3861: ^ [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1505,36): error C3861: 'ValueToKey': identifier not found [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1505,36): error C3861: return __super::Remove(ValueToKey<TKey, TElement>::ToKey(element)); [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj] d:\chakra\src\lib\common\datastructures\basedictionary.h(1505,36): error C3861: ^ [D:\Chakra\src\lib\Common\Exceptions\Chakra.Common.Exceptions.vcxproj]

"D:\Chakra\src\Build\Chakra.Core.sln" (Rebuild target) (1) -> "D:\Chakra\src\Build..\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj.metaproj" (Rebuild target) (10) -> "D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj" (Rebuild target) (11) -> d:\chakra\src\lib\common\datastructures\dictionaryentry.h(85,17): error C3861: 'ClearValue': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\dictionaryentry.h(85,17): error C3861: ClearValue::Clear(&this->value); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\dictionaryentry.h(85,17): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\dictionaryentry.h(98,39): error C3861: 'ValueToKey': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\dictionaryentry.h(98,39): error C3861: TKey Key() const { return ValueToKey<TKey, TValue>::ToKey(this->value); } [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\dictionaryentry.h(98,39): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\smallheapblockallocator.h(72,51): error C2039: 'IsConcurrentSweepState': is not a member of 'Memory::Recycler' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\smallheapblockallocator.h(72,51): error C2039: return IsFreeListAllocMode() && recycler->IsConcurrentSweepState(); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\smallheapblockallocator.h(72,51): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(90,33): error C2039: 'CreateWeakReferenceHandle': is not a member of 'Memory::Recycler' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(90,33): error C2039: weakRef = recycler->CreateWeakReferenceHandle((T*)this); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(90,33): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(355,47): error C2039: 'FindHeapBlock': is not a member of 'Memory::Recycler' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(355,47): error C2039: entry->strongRefHeapBlock = recycler->FindHeapBlock(strongReference); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(355,47): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(358,50): error C2039: 'FindHeapBlock': is not a member of 'Memory::Recycler' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(358,50): error C2039: HeapBlock * weakRefHeapBlock = recycler->FindHeapBlock(entry); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\memory\recyclerweakreference.h(358,50): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\weakreferencedictionary.h(232,20): error C3861: 'values': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\weakreferencedictionary.h(232,20): error C3861: return values[i]; [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\weakreferencedictionary.h(232,20): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\weakreferencedictionary.h(239,20): error C3861: 'values': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\weakreferencedictionary.h(239,20): error C3861: return values[i]; [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\common\datastructures\weakreferencedictionary.h(239,20): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\parser\scan.h(670,17): error C2065: 'ULongMult': undeclared identifier [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\parser\scan.h(670,17): error C2065: if (FAILED(ULongMult(m_cchMax, sizeof(OLECHAR) * 2, &cbNew))) [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\parser\scan.h(670,17): error C2065: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\parser\scan.h(670,17): error C3861: 'ULongMult': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\parser\scan.h(670,17): error C3861: if (FAILED(ULongMult(m_cchMax, sizeof(OLECHAR) * 2, &cbNew))) [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\parser\scan.h(670,17): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(139,18): error C2039: 'GetPropertyRecord': is not a member of 'Js::JavascriptString' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(139,18): error C2039: str->GetPropertyRecord(&propRecord); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(139,18): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(143,36): error C2039: 'GetString': is not a member of 'Js::JavascriptString' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(143,36): error C2039: return Equals(str->GetString(), str->GetLength()); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(143,36): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(143,54): error C2039: 'GetLength': is not a member of 'Js::JavascriptString' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(143,54): error C2039: return Equals(str->GetString(), str->GetLength()); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\propertyrecord.h(143,54): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\crosssite.h(29,41): error C3861: 'CrossSiteObject': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\crosssite.h(29,41): error C3861: BOOL ret = VirtualTableInfo<CrossSiteObject>::HasVirtualTable(obj); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\crosssite.h(29,41): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\inlinecache.h(412,62): error C2039: 'GetLibrary': is not a member of 'Js::ScriptContext' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\inlinecache.h(412,62): error C2039: *propertyValue = IsMissing ? requestContext->GetLibrary()->GetFalse() : requestContext->GetLibrary()->GetTrue(); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\inlinecache.h(412,62): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\inlinecache.h(412,105): error C2039: 'GetLibrary': is not a member of 'Js::ScriptContext' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\inlinecache.h(412,105): error C2039: *propertyValue = IsMissing ? requestContext->GetLibrary()->GetFalse() : requestContext->GetLibrary()->GetTrue(); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\inlinecache.h(412,105): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\functionbody.h(3470,20): error C3861: 'GetSlot': identifier not found [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\functionbody.h(3470,20): error C3861: fn(GetSlot[i]); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\base\functionbody.h(3470,20): error C3861: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\prototypechaincache.h(197,28): error C2039: 'InvalidateStoreFieldCaches': is not a member of 'Js::ScriptContext' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\prototypechaincache.h(197,28): error C2039: scriptContext->InvalidateStoreFieldCaches(propertyId); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\language\prototypechaincache.h(197,28): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(66,28): error C2039: 'FindPropertyRecord': is not a member of 'Js::ScriptContext' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(66,28): error C2039: scriptContext->FindPropertyRecord(value, N - 1, &propertyRecord); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(66,28): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(69,35): error C2039: 'GetPropertyString': is not a member of 'Js::ScriptContext' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(69,35): error C2039: return scriptContext->GetPropertyString(propertyRecord->GetPropertyId()); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(69,35): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(73,120): error C2039: 'GetRecycler': is not a member of 'Js::ScriptContext' [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(73,120): error C2039: return LiteralString::New(stringTypeStatic, value, N - 1 /don't include terminating NUL/, scriptContext->GetRecycler()); [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj] d:\chakra\src\lib\runtime\library\stringcache.h(73,120): error C2039: ^ [D:\Chakra\src\lib\Runtime\ByteCode\Chakra.Runtime.ByteCode.vcxproj]

贡献者指南