Page MenuHomePhabricator

hans (Hans Wennborg)
User

Projects

User does not belong to any projects.

User Details

User Since
Apr 18 2013, 6:48 AM (480 w, 1 d)

Recent Activity

Today

hans accepted D128238: [LLD][COFF] Ignore /kernel flag.

lgtm

Fri, Jul 1, 2:52 AM · Restricted Project, Restricted Project

Tue, Jun 28

hans accepted D128649: [clang-cl] Handle some pragma alloc_text corner cases handled by MSVC.

lgtm

Tue, Jun 28, 7:23 AM · Restricted Project, Restricted Project
hans added a comment to D125800: [COFF] Add vfsoverlay flag.

Seems good to me in principle, I just have a few nits.

Tue, Jun 28, 7:19 AM · Restricted Project
hans added a comment to D128649: [clang-cl] Handle some pragma alloc_text corner cases handled by MSVC.

Isn't the question whether f is considered "extern C" in the end or not? I thought isExternC() checks that? Are you saying it would return false for f in your example?

Yup, isExternC() is returning false for that case because there's "static".

Tue, Jun 28, 1:53 AM · Restricted Project, Restricted Project

Mon, Jun 27

hans added a comment to D128649: [clang-cl] Handle some pragma alloc_text corner cases handled by MSVC.

I think we have to use isInExternCContext() to accept the following (MSVC accepts this):

extern "C" { static void f(); }
static void f() {}
Mon, Jun 27, 9:48 AM · Restricted Project, Restricted Project
hans accepted D128409: [clang-cl] Add -emit-ast to clang-cl driver.

lgtm

Mon, Jun 27, 8:50 AM · Restricted Project, Restricted Project
hans added inline comments to D127938: Update Windows packaging script..
Mon, Jun 27, 8:12 AM · Restricted Project, Restricted Project
hans added a comment to D128409: [clang-cl] Add -emit-ast to clang-cl driver.

Regarding /Fo bit - if you want I can change it to only handle /o in this if statement. I don't mind either way.

Mon, Jun 27, 8:10 AM · Restricted Project, Restricted Project
hans added inline comments to D128649: [clang-cl] Handle some pragma alloc_text corner cases handled by MSVC.
Mon, Jun 27, 8:08 AM · Restricted Project, Restricted Project
hans accepted D128409: [clang-cl] Add -emit-ast to clang-cl driver.

It feels kind of weird to use the /Fo option for this that's for object files, but if that makes using the static analyzer more convenient that's okay I suppose.

Mon, Jun 27, 7:15 AM · Restricted Project, Restricted Project
hans added a comment to D127226: [libc++] Simplify type_traits and use more builtins.

Did the reland in https://reviews.llvm.org/rG31ae52859f7a2339f31bb78c5163c23cb872f179 address the issue raised by Alan and Manoj? The commit message only says "Stuff" :-)

Mon, Jun 27, 1:09 AM · Restricted Project, Restricted Project

Thu, Jun 23

hans added a comment to D128409: [clang-cl] Add -emit-ast to clang-cl driver.

I'm unfamiliar with -emit-ast. Can you add some background on what this is for? What's CTU?

CTU is cross translation unit. In this case the clang-static-analyzer can do analysis over several files - see the official docs that recommend that you build the .ast files with -emit-ast:
https://clang.llvm.org/docs/analyzer/user-docs/CrossTranslationUnit.html#manual-ctu-analysis

Thu, Jun 23, 5:21 AM · Restricted Project, Restricted Project
hans added a comment to D128409: [clang-cl] Add -emit-ast to clang-cl driver.

I'm unfamiliar with -emit-ast. Can you add some background on what this is for? What's CTU?

Thu, Jun 23, 4:08 AM · Restricted Project, Restricted Project

Tue, Jun 21

hans added a comment to D126559: [MSVC] Fix pragma alloc_text failing for C files.

Oh I see, that makes sense. We aren't accepting https://godbolt.org/z/9Yej9vhYd. Do you know of a way to get the NamedDecl with extern "C" instead of the second declaration?

Tue, Jun 21, 6:53 AM · Restricted Project, Restricted Project
hans added a comment to D126559: [MSVC] Fix pragma alloc_text failing for C files.

Ignoring the pragma alloc_text, it looks like GCC compiles the following foo with C linkage vs LLVM which compiles with C++ linkage (foo's name is mangled):

Tue, Jun 21, 6:20 AM · Restricted Project, Restricted Project
hans added a comment to D128238: [LLD][COFF] Ignore /kernel flag.

Do you have a use case for this, or have you checked that it works?

Tue, Jun 21, 6:16 AM · Restricted Project, Restricted Project
hans added a comment to D127938: Update Windows packaging script..
  1. Use the existing script but restoring the deleted packaging step.
Tue, Jun 21, 5:35 AM · Restricted Project, Restricted Project
hans added a comment to D127641: [clang-cl][MSVC] Enable /Zc:alignedNew for C++17 and /Zc:sizedDealloc by default.

It looks like misc-new-delete-overloads.cpp is failing on line 20:
..
On Line 16, it says sized deallocations are not enabled by default, but this patch turns it on by default for MSVC. Should I unsupport this test for windows or is there a way to pass /Zc:sizedDealloc- only for windows?

Tue, Jun 21, 3:35 AM · Restricted Project, Restricted Project, Restricted Project

Mon, Jun 20

hans accepted D127641: [clang-cl][MSVC] Enable /Zc:alignedNew for C++17 and /Zc:sizedDealloc by default.

(If you like, consider dropping the "-DEFAULT" part from the new filecheck prefixes. I don't think they really add much value.)

Mon, Jun 20, 9:25 AM · Restricted Project, Restricted Project, Restricted Project
hans added a comment to D127938: Update Windows packaging script..

Taking a step back, at this point the patch is almost a rewrite of the current script. It's doing a lot of different things, and I'm not sure I agree with all of them. Perhaps we need to discuss a bit more what are the goals of these changes, and whether they can be done as a series of incremental patches rather than a rewrite.

Mon, Jun 20, 2:19 AM · Restricted Project, Restricted Project

Thu, Jun 16

hans committed rGbf02ed240dfa: Prevent crash when TurnSwitchRangeIntoICmp receives default unreachable… (authored by swamulism).
Prevent crash when TurnSwitchRangeIntoICmp receives default unreachable…
Thu, Jun 16, 7:17 AM · Restricted Project, Restricted Project
hans closed D127712: Prevent crash when TurnSwitchRangeIntoICmp receives default unreachable destination.
Thu, Jun 16, 7:17 AM · Restricted Project, Restricted Project
hans accepted D127712: Prevent crash when TurnSwitchRangeIntoICmp receives default unreachable destination.

Do you have commit access, or do you need someone to commit this for you?

Thu, Jun 16, 5:23 AM · Restricted Project, Restricted Project
hans added inline comments to D127938: Update Windows packaging script..
Thu, Jun 16, 4:59 AM · Restricted Project, Restricted Project

Wed, Jun 15

hans added inline comments to D127641: [clang-cl][MSVC] Enable /Zc:alignedNew for C++17 and /Zc:sizedDealloc by default.
Wed, Jun 15, 7:56 AM · Restricted Project, Restricted Project, Restricted Project
hans accepted D127709: [LLD][COFF] Convert file name to lowercase when inserting it into visitedLibs.

lgtm

Wed, Jun 15, 7:36 AM · Restricted Project, Restricted Project

Tue, Jun 14

hans added inline comments to D127641: [clang-cl][MSVC] Enable /Zc:alignedNew for C++17 and /Zc:sizedDealloc by default.
Tue, Jun 14, 4:59 AM · Restricted Project, Restricted Project, Restricted Project
hans added a comment to D127709: [LLD][COFF] Convert file name to lowercase when inserting it into visitedLibs.

Looks right to me. Should there be a test for this?

Tue, Jun 14, 4:19 AM · Restricted Project, Restricted Project
hans added a comment to D127712: Prevent crash when TurnSwitchRangeIntoICmp receives default unreachable destination.

Nice!

Tue, Jun 14, 2:22 AM · Restricted Project, Restricted Project

Mon, Jun 13

hans accepted D127519: [clang-cl] Accept /FA[c][s][u], but ignore the arguments.

lgtm

Mon, Jun 13, 9:23 AM · Restricted Project, Restricted Project
hans added a comment to D127519: [clang-cl] Accept /FA[c][s][u], but ignore the arguments.

Previously, /FAsc would emit a warning. Now, it will just do what /FA does.

Mon, Jun 13, 7:40 AM · Restricted Project, Restricted Project
hans added a comment to D127452: [clang-cl][MSVC] Map /external:Wn n=1-4 to -Wsystem-headers.

Hmm do you know how I can restart the pre-merge checks? It looks like the x64 debian openmp tests failed. I don't think this patch is related, but I want to make sure

Mon, Jun 13, 7:09 AM · Restricted Project, Restricted Project
hans added a comment to D126835: Round up zero-sized symbols to 1 byte in `.debug_aranges` (without breaking other logic)..

When trying this on Chromium (in the context of https://crbug.com/1335630) we hit a densemap assert in llvm::DwarfDebug::emitDebugARanges()
See the attached reproducer.

Mon, Jun 13, 7:05 AM · Restricted Project, Restricted Project
hans added a comment to D126257: Round up zero-sized symbols to 1 byte in `.debug_aranges`..

As another data point, in Chromium we lost line numbers in backtraces after this, see https://bugs.chromium.org/p/chromium/issues/detail?id=1335630

Mon, Jun 13, 6:42 AM · Restricted Project, Restricted Project

Fri, Jun 10

hans accepted D127452: [clang-cl][MSVC] Map /external:Wn n=1-4 to -Wsystem-headers.

lgtm

Fri, Jun 10, 7:17 AM · Restricted Project, Restricted Project
hans added inline comments to D127482: [SimplifyCFG] Share code to compute switch density between ShouldBuildLookupTable() and ReduceSwitchRange().
Fri, Jun 10, 6:36 AM · Restricted Project, Restricted Project
hans committed rG3800b157d77b: [SimplifyCFG] Share code to compute switch density between… (authored by hans).
[SimplifyCFG] Share code to compute switch density between…
Fri, Jun 10, 6:30 AM · Restricted Project, Restricted Project
hans closed D127482: [SimplifyCFG] Share code to compute switch density between ShouldBuildLookupTable() and ReduceSwitchRange().
Fri, Jun 10, 6:30 AM · Restricted Project, Restricted Project
hans added inline comments to D127482: [SimplifyCFG] Share code to compute switch density between ShouldBuildLookupTable() and ReduceSwitchRange().
Fri, Jun 10, 6:20 AM · Restricted Project, Restricted Project
hans added a comment to D127452: [clang-cl][MSVC] Map /external:Wn n=1-4 to -Wsystem-headers.

Right, this is not the same, but I suppose it's better than ignoring the flag.

Fri, Jun 10, 6:03 AM · Restricted Project, Restricted Project
hans requested review of D127482: [SimplifyCFG] Share code to compute switch density between ShouldBuildLookupTable() and ReduceSwitchRange().
Fri, Jun 10, 3:36 AM · Restricted Project, Restricted Project

Tue, Jun 7

hans accepted D126931: [llvm-ml] Remove all file extension restrictions.

lgtm

Tue, Jun 7, 1:56 AM · Restricted Project, Restricted Project

Fri, Jun 3

hans accepted D126963: [gn build] Extract compiled_action.gni from tablegen.gni.

Factor our the few lines we need for running a host binary as part of the

Fri, Jun 3, 7:16 AM · Restricted Project, Restricted Project
hans committed rG166f9be330dd: Update old mailing list link in the nullability doc (authored by hans).
Update old mailing list link in the nullability doc
Fri, Jun 3, 5:24 AM · Restricted Project, Restricted Project
hans added a comment to D126931: [llvm-ml] Remove all file extension restrictions.

However, this is a problem on *nix systems as a leading forward slash
there is a valid file path. To partially mitigate this, we now consider
such inputs invalid arguments if they begin with a forward slash and do
*not* contain any more further forward slash characters. Everything else
is treated as a filename and we emit an appropriate error.

Fri, Jun 3, 4:42 AM · Restricted Project, Restricted Project

Thu, Jun 2

hans added a reverting change for rG8c8a2679a20f: [clang][AIX] add option mdefault-visibility-export-mapping: rGd42fe9aa8420: Revert "[clang][AIX] add option mdefault-visibility-export-mapping".
Thu, Jun 2, 6:16 AM · Restricted Project, Restricted Project
hans committed rGd42fe9aa8420: Revert "[clang][AIX] add option mdefault-visibility-export-mapping" (authored by hans).
Revert "[clang][AIX] add option mdefault-visibility-export-mapping"
Thu, Jun 2, 6:16 AM · Restricted Project, Restricted Project
hans added a comment to D126340: [clang][AIX] add option -mdefault-visibility-export-mapping.

We're hitting an assertion in Chromium due to this:

Thu, Jun 2, 6:16 AM · Restricted Project, Restricted Project
hans added a reverting change for D126340: [clang][AIX] add option -mdefault-visibility-export-mapping: rGd42fe9aa8420: Revert "[clang][AIX] add option mdefault-visibility-export-mapping".
Thu, Jun 2, 6:16 AM · Restricted Project, Restricted Project

May 31 2022

hans accepted D126675: [Windows] Don't try to wildcard expand paths starting with \\?\.

lgtm

May 31 2022, 8:24 AM · Restricted Project, Restricted Project
hans added a reviewer for D126664: Expand definition deprecation warning to include constexpr statements.: aaron.ballman.

Looks reasonable to me. It would be good if Richard or Aaron could take a look too.

May 31 2022, 8:16 AM · Restricted Project, Restricted Project

May 30 2022

hans committed rGb2719349d2a6: Change build_llvm_package.bat to build_llvm_release.bat (authored by hans).
Change build_llvm_package.bat to build_llvm_release.bat
May 30 2022, 8:09 AM · Restricted Project, Restricted Project
hans added a comment to D126397: [pseudo] Fix pseudo-gen usage when cross-compiling.

This didn't fix the mac/arm64 llvm builds for Chromium. I think it's because we don't set CMAKE_CROSSCOMPILING, so I'll try doing that as a work-around. (crbug.com/1330304).

May 30 2022, 7:10 AM · Restricted Project, Restricted Project
hans added a comment to D126425: [llvm-ml] Add support for the .S extension.

It appears to me that MASM doesn't care much about the file extension at all:

May 30 2022, 6:48 AM · Restricted Project, Restricted Project
hans added a reverting change for rG4486aa03c5f4: build_llvm_package.bat: Produce zip files in addition to the installers: rGbac4934c84f3: Revert "build_llvm_package.bat: Produce zip files in addition to the installers".
May 30 2022, 4:58 AM
hans committed rGbac4934c84f3: Revert "build_llvm_package.bat: Produce zip files in addition to the installers" (authored by hans).
Revert "build_llvm_package.bat: Produce zip files in addition to the installers"
May 30 2022, 4:58 AM · Restricted Project, Restricted Project
hans added a reverting change for D74896: build_llvm_package.bat: Produce zip files in addition to the installers: rGbac4934c84f3: Revert "build_llvm_package.bat: Produce zip files in addition to the installers".
May 30 2022, 4:58 AM · Restricted Project
hans committed rG10d2195305ac: Update the Windows packaging script (authored by hans).
Update the Windows packaging script
May 30 2022, 2:58 AM · Restricted Project, Restricted Project

May 27 2022

hans committed rG865ad6bd2165: [libc++] Use __libcpp_clz for a tighter __log2i function (authored by hans).
[libc++] Use __libcpp_clz for a tighter __log2i function
May 27 2022, 9:58 AM · Restricted Project, Restricted Project
hans closed D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.
May 27 2022, 9:58 AM · Restricted Project, Restricted Project
hans added a comment to D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.

@philnik: Does it look good to you to?

May 27 2022, 8:57 AM · Restricted Project, Restricted Project
hans accepted D120201: [Clang] Extend -gen-reproducer flag.

lgtm

May 27 2022, 8:42 AM · Restricted Project, Restricted Project
Herald added a project to D74727: Allow customized relative PYTHONHOME: Restricted Project.
May 27 2022, 8:11 AM · Restricted Project, Restricted Project

May 25 2022

hans added inline comments to D120201: [Clang] Extend -gen-reproducer flag.
May 25 2022, 9:57 AM · Restricted Project, Restricted Project
hans updated the diff for D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.

Switch to CHAR_BIT from <climits>.

May 25 2022, 7:08 AM · Restricted Project, Restricted Project
hans added inline comments to D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.
May 25 2022, 7:08 AM · Restricted Project, Restricted Project

May 24 2022

hans updated the diff for D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.

Rebase to kick the CI.

May 24 2022, 9:58 AM · Restricted Project, Restricted Project
hans added a comment to D120201: [Clang] Extend -gen-reproducer flag.

This patch no longer depends on D122335 which created the reproducer as a tar file. Now this will just emit the crash reproduction information as usual, but under other circumstances given the value of -femit-reproducer.

May 24 2022, 9:02 AM · Restricted Project, Restricted Project
hans committed rGebe2e4f5b773: [libcxx] Add sort.bench.cpp to libcxx/benchmarks/CMakeLists.txt (authored by hans).
[libcxx] Add sort.bench.cpp to libcxx/benchmarks/CMakeLists.txt
May 24 2022, 7:42 AM · Restricted Project, Restricted Project
hans closed D126297: [libcxx] Add sort.bench.cpp to libcxx/benchmarks/CMakeLists.txt.
May 24 2022, 7:42 AM · Restricted Project, Restricted Project
hans added a comment to D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.

Here are some benchmark numbers (requires D126297). I ran build.release/projects/libcxx/benchmarks/sort.libcxx.out --benchmark_filter=BM_Sort_uint32_QuickSortAdversary*.

May 24 2022, 7:27 AM · Restricted Project, Restricted Project
hans requested review of D126297: [libcxx] Add sort.bench.cpp to libcxx/benchmarks/CMakeLists.txt.
May 24 2022, 6:55 AM · Restricted Project, Restricted Project

May 19 2022

hans requested review of D125958: [libc++] Use __libcpp_clz for a tighter __log2i function.
May 19 2022, 2:49 AM · Restricted Project, Restricted Project

May 18 2022

hans accepted D124701: [clang] Honor __attribute__((no_builtin("foo"))) on functions.

lgtm

May 18 2022, 7:57 AM · Restricted Project, Restricted Project
hans accepted D125889: clang-cl: Move /Zc: tests from cl-options.c to cl-zc.cpp.

lgtm

May 18 2022, 7:56 AM · Restricted Project, Restricted Project
hans added a comment to D124701: [clang] Honor __attribute__((no_builtin("foo"))) on functions.

Just one more comment, then I'm happy :)

May 18 2022, 6:02 AM · Restricted Project, Restricted Project

May 17 2022

hans added inline comments to D125513: [clang-cl] Add /Zc:wchar_t- option.
May 17 2022, 5:18 AM · Restricted Project, Restricted Project
hans added a comment to D125582: [llvm-ml] Add support for extern proc.

Okay, but even if llvm-ml's output is better, it should still have a test. And since it differs from MSVC's output an error or at least a warning is probably a good idea.

May 17 2022, 5:12 AM · Restricted Project, Restricted Project
hans added inline comments to D124701: [clang] Honor __attribute__((no_builtin("foo"))) on functions.
May 17 2022, 4:26 AM · Restricted Project, Restricted Project
hans added a comment to D125426: Add a new flavor "BBLabels" to LLVM_BUILD_INSTRUMENTED.

Please update llvm/docs/CMake.rst to document the different options of LLVM_BUILD_INSTRUMENTED.

May 17 2022, 2:26 AM · Restricted Project, Restricted Project

May 16 2022

hans added a comment to D125582: [llvm-ml] Add support for extern proc.

Interestingly enough, under MSVC the following is allowed:

extern foo:proc

mov eax, foo

MSVC will output:

mov eax, 0

while llvm-ml will currently output:

mov eax, dword ptr [foo]

(since foo is an extern)

Arguably, llvm-ml's output makes more sense, even though it's
inconsistent with MSVC ml. However, since moving an extern proc symbol
to a register doesn't really make sense in the first place, we'll treat
it as undefined behavior for now.

May 16 2022, 3:57 AM · Restricted Project, Restricted Project

May 11 2022

hans committed rG6398f3f2e904: [clang] Add the flag -ffile-reproducible (authored by ayzhao).
[clang] Add the flag -ffile-reproducible
May 11 2022, 2:05 PM · Restricted Project, Restricted Project
hans closed D122766: [clang] Add the flag -ffile-reproducible.
May 11 2022, 2:05 PM · Restricted Project, Restricted Project, Restricted Project

May 9 2022

hans accepted D122766: [clang] Add the flag -ffile-reproducible.

I still wish this could just be the default behavior, but this flag seems a good compromise.

May 9 2022, 11:23 AM · Restricted Project, Restricted Project, Restricted Project

May 6 2022

hans added a comment to D124702: [MSVC] Add support for pragma function.

It needs tests for the warnings about badly formed pragmas, and for pragmas outside file/namespace scope.

May 6 2022, 5:54 AM · Restricted Project, Restricted Project

May 4 2022

hans added a comment to D124702: [MSVC] Add support for pragma function.

And should we error/warn if the pragma occurs not in namespace scope?

Oh I wasn't sure how to check if the function pragma was outside of a function.

May 4 2022, 7:48 AM · Restricted Project, Restricted Project

May 2 2022

hans accepted D124153: [CMake] Make omitting CMAKE_BUILD_TYPE an error.

lgtm

May 2 2022, 5:56 AM · Restricted Project, Restricted Project
hans added a comment to D124702: [MSVC] Add support for pragma function.

From the MS docs:

May 2 2022, 5:23 AM · Restricted Project, Restricted Project
hans added a comment to D124701: [clang] Honor __attribute__((no_builtin("foo"))) on functions.

If I understand correctly, D68028 made it so that LLVM doesn't add any builtin calls (e.g. turning for-loops into memcpy), but Clang could still turn calls into builtins. Maybe the patch description could be expanded to explain this?

May 2 2022, 3:42 AM · Restricted Project, Restricted Project

Apr 28 2022

hans accepted D124413: [llvm-ml] Improve indirect call parsing.

lgtm

Apr 28 2022, 4:09 AM · Restricted Project, Restricted Project
hans added a comment to D116527: [clang-format] Fix indentation for array variables with alignment of consecutive assignments and declarations..

Feel free to revert and add a regression test please. I'll take a look.

Apr 28 2022, 2:42 AM · Restricted Project, Restricted Project
Herald added a project to D116527: [clang-format] Fix indentation for array variables with alignment of consecutive assignments and declarations.: Restricted Project.

This seems to have caused a strange indentation problem, see https://github.com/llvm/llvm-project/issues/55161

Apr 28 2022, 2:25 AM · Restricted Project, Restricted Project

Apr 27 2022

hans committed rGaed44d282249: Remove the Visual Studio/MSBuild integration (llvm/tools/msbuild/) (authored by hans).
Remove the Visual Studio/MSBuild integration (llvm/tools/msbuild/)
Apr 27 2022, 8:32 AM · Restricted Project, Restricted Project
hans closed D124521: Remove the Visual Studio/MSBuild integration.
Apr 27 2022, 8:32 AM · Restricted Project, Restricted Project
hans added a comment to D124521: Remove the Visual Studio/MSBuild integration.

Should we add a release notes entry? (Not sure)

Apr 27 2022, 8:28 AM · Restricted Project, Restricted Project
hans added a comment to D124413: [llvm-ml] Improve indirect call parsing.

The logic seems pretty tricky to me, but I defer to Eric for that.
And I'm slowly coming to terms that brackets doesn't seem to mean anything to masm, it's really just about the operand types.

Apr 27 2022, 8:04 AM · Restricted Project, Restricted Project
hans requested review of D124521: Remove the Visual Studio/MSBuild integration.
Apr 27 2022, 5:17 AM · Restricted Project, Restricted Project

Apr 26 2022

hans added inline comments to D124413: [llvm-ml] Improve indirect call parsing.
Apr 26 2022, 5:59 AM · Restricted Project, Restricted Project

Apr 22 2022

hans accepted D124254: [lld/win] Mention in release notes that /winsysroot: currently requires /machine:.

lgtm

Apr 22 2022, 6:21 AM · Restricted Project, Restricted Project
hans accepted D124057: [asan] Enable detect_stack_use_after_return=1 by default on Linux.
Apr 22 2022, 4:50 AM · Restricted Project, Restricted Project, Restricted Project, Restricted Project