mirror of
https://github.com/luau-lang/luau.git
synced 2024-12-13 13:30:40 +00:00
Use -Werror in CI only (#201)
We keep getting compat reports for warnings in various compiler versions. While we can keep merging PRs to resolve these warnings, it would be nice if the users of other compilers or compiler versions weren't blocked on us fixing this. As such, this change disables Werror by default and only enables it when requested, which happens in CI in test builds.
This commit is contained in:
parent
70ffc8a01d
commit
b7d26b371a
5 changed files with 25 additions and 11 deletions
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
|
@ -27,13 +27,13 @@ jobs:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
- name: make test
|
- name: make test
|
||||||
run: |
|
run: |
|
||||||
make -j2 config=sanitize test
|
make -j2 config=sanitize werror=1 test
|
||||||
- name: make test w/flags
|
- name: make test w/flags
|
||||||
run: |
|
run: |
|
||||||
make -j2 config=sanitize flags=true test
|
make -j2 config=sanitize werror=1 flags=true test
|
||||||
- name: make cli
|
- name: make cli
|
||||||
run: |
|
run: |
|
||||||
make -j2 config=sanitize luau luau-analyze # match config with tests to improve build time
|
make -j2 config=sanitize werror=1 luau luau-analyze # match config with tests to improve build time
|
||||||
./luau tests/conformance/assert.lua
|
./luau tests/conformance/assert.lua
|
||||||
./luau-analyze tests/conformance/assert.lua
|
./luau-analyze tests/conformance/assert.lua
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
- name: cmake configure
|
- name: cmake configure
|
||||||
run: cmake . -A ${{matrix.arch}}
|
run: cmake . -A ${{matrix.arch}} -DLUAU_WERROR=ON
|
||||||
- name: cmake test
|
- name: cmake test
|
||||||
shell: bash # necessary for fail-fast
|
shell: bash # necessary for fail-fast
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -1509,7 +1509,7 @@ ExprResult<TypeId> TypeChecker::checkExpr(const ScopePtr& scope, const AstExprVa
|
||||||
std::vector<TypeId> types = flatten(varargPack).first;
|
std::vector<TypeId> types = flatten(varargPack).first;
|
||||||
return {!types.empty() ? types[0] : nilType};
|
return {!types.empty() ? types[0] : nilType};
|
||||||
}
|
}
|
||||||
else if (auto ftp = get<FreeTypePack>(varargPack))
|
else if (get<FreeTypePack>(varargPack))
|
||||||
{
|
{
|
||||||
TypeId head = freshType(scope);
|
TypeId head = freshType(scope);
|
||||||
TypePackId tail = freshTypePack(scope);
|
TypePackId tail = freshTypePack(scope);
|
||||||
|
@ -1539,7 +1539,7 @@ ExprResult<TypeId> TypeChecker::checkExpr(const ScopePtr& scope, const AstExprCa
|
||||||
{
|
{
|
||||||
return {pack->head.empty() ? nilType : pack->head[0], std::move(result.predicates)};
|
return {pack->head.empty() ? nilType : pack->head[0], std::move(result.predicates)};
|
||||||
}
|
}
|
||||||
else if (auto ftp = get<Unifiable::Free>(retPack))
|
else if (get<Unifiable::Free>(retPack))
|
||||||
{
|
{
|
||||||
TypeId head = freshType(scope);
|
TypeId head = freshType(scope);
|
||||||
TypePackId pack = addTypePack(TypePackVar{TypePack{{head}, freshTypePack(scope)}});
|
TypePackId pack = addTypePack(TypePackVar{TypePack{{head}, freshTypePack(scope)}});
|
||||||
|
|
|
@ -293,7 +293,7 @@ bool isGeneric(TypeId ty)
|
||||||
bool maybeGeneric(TypeId ty)
|
bool maybeGeneric(TypeId ty)
|
||||||
{
|
{
|
||||||
ty = follow(ty);
|
ty = follow(ty);
|
||||||
if (auto ftv = get<FreeTypeVar>(ty))
|
if (get<FreeTypeVar>(ty))
|
||||||
return true;
|
return true;
|
||||||
else if (auto ttv = get<TableTypeVar>(ty))
|
else if (auto ttv = get<TableTypeVar>(ty))
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,6 +9,7 @@ project(Luau LANGUAGES CXX)
|
||||||
|
|
||||||
option(LUAU_BUILD_CLI "Build CLI" ON)
|
option(LUAU_BUILD_CLI "Build CLI" ON)
|
||||||
option(LUAU_BUILD_TESTS "Build tests" ON)
|
option(LUAU_BUILD_TESTS "Build tests" ON)
|
||||||
|
option(LUAU_WERROR "Warnings as errors" OFF)
|
||||||
|
|
||||||
add_library(Luau.Ast STATIC)
|
add_library(Luau.Ast STATIC)
|
||||||
add_library(Luau.Compiler STATIC)
|
add_library(Luau.Compiler STATIC)
|
||||||
|
@ -57,12 +58,19 @@ set(LUAU_OPTIONS)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
list(APPEND LUAU_OPTIONS /D_CRT_SECURE_NO_WARNINGS) # We need to use the portable CRT functions.
|
list(APPEND LUAU_OPTIONS /D_CRT_SECURE_NO_WARNINGS) # We need to use the portable CRT functions.
|
||||||
list(APPEND LUAU_OPTIONS /WX) # Warnings are errors
|
|
||||||
list(APPEND LUAU_OPTIONS /MP) # Distribute single project compilation across multiple cores
|
list(APPEND LUAU_OPTIONS /MP) # Distribute single project compilation across multiple cores
|
||||||
else()
|
else()
|
||||||
list(APPEND LUAU_OPTIONS -Wall) # All warnings
|
list(APPEND LUAU_OPTIONS -Wall) # All warnings
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Enabled in CI; we should be warning free on our main compiler versions but don't guarantee being warning free everywhere
|
||||||
|
if(LUAU_WERROR)
|
||||||
|
if(MSVC)
|
||||||
|
list(APPEND LUAU_OPTIONS /WX) # Warnings are errors
|
||||||
|
else()
|
||||||
list(APPEND LUAU_OPTIONS -Werror) # Warnings are errors
|
list(APPEND LUAU_OPTIONS -Werror) # Warnings are errors
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
target_compile_options(Luau.Ast PRIVATE ${LUAU_OPTIONS})
|
target_compile_options(Luau.Ast PRIVATE ${LUAU_OPTIONS})
|
||||||
target_compile_options(Luau.Analysis PRIVATE ${LUAU_OPTIONS})
|
target_compile_options(Luau.Analysis PRIVATE ${LUAU_OPTIONS})
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -46,14 +46,20 @@ endif
|
||||||
OBJECTS=$(AST_OBJECTS) $(COMPILER_OBJECTS) $(ANALYSIS_OBJECTS) $(VM_OBJECTS) $(TESTS_OBJECTS) $(CLI_OBJECTS) $(FUZZ_OBJECTS)
|
OBJECTS=$(AST_OBJECTS) $(COMPILER_OBJECTS) $(ANALYSIS_OBJECTS) $(VM_OBJECTS) $(TESTS_OBJECTS) $(CLI_OBJECTS) $(FUZZ_OBJECTS)
|
||||||
|
|
||||||
# common flags
|
# common flags
|
||||||
CXXFLAGS=-g -Wall -Werror
|
CXXFLAGS=-g -Wall
|
||||||
LDFLAGS=
|
LDFLAGS=
|
||||||
|
|
||||||
# temporary, for older gcc versions as they treat var in `if (type var = val)` as unused
|
# some gcc versions treat var in `if (type var = val)` as unused
|
||||||
|
# some gcc versions treat variables used in constexpr if blocks as unused
|
||||||
ifeq ($(findstring g++,$(shell $(CXX) --version)),g++)
|
ifeq ($(findstring g++,$(shell $(CXX) --version)),g++)
|
||||||
CXXFLAGS+=-Wno-unused
|
CXXFLAGS+=-Wno-unused
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# enabled in CI; we should be warning free on our main compiler versions but don't guarantee being warning free everywhere
|
||||||
|
ifneq ($(werror),)
|
||||||
|
CXXFLAGS+=-Werror
|
||||||
|
endif
|
||||||
|
|
||||||
# configuration-specific flags
|
# configuration-specific flags
|
||||||
ifeq ($(config),release)
|
ifeq ($(config),release)
|
||||||
CXXFLAGS+=-O2 -DNDEBUG
|
CXXFLAGS+=-O2 -DNDEBUG
|
||||||
|
|
Loading…
Reference in a new issue