Commit Graph

5189 Commits

Author SHA1 Message Date
Jeroen van Rijn 47888794c8 Fix assert when return value expected. 2024-12-01 11:54:56 +11:00
0dminnimda 79733c5f5e src/main.cpp: apply suggestion
Co-authored-by: Laytan <laytanlaats@hotmail.com>
2024-12-01 11:54:56 +11:00
0dminnimda 27aa40c357 Update version in more places 2024-12-01 11:54:56 +11:00
0dminnimda 456279feba Add support for llvm version 19 2024-12-01 11:54:56 +11:00
Laytan Laats d51692a3b4 properly keep track of current scope for debugging
Fixes #4519
2024-12-01 11:54:56 +11:00
Jeroen van Rijn 21ff9856d4 Check type_expr in check_procedure_param_polymorphic_type
Fixes #4523 assert.
2024-12-01 11:54:56 +11:00
Laytan Laats da4347f790 sys/info & odin report: rework macos version retrieval 2024-12-01 11:54:56 +11:00
Laytan Laats 5a201d588b add macos 15.1.1 to odin report and sys/info 2024-12-01 11:54:56 +11:00
gingerBill 1be9833073 Convert mutex guard to "try lock" 2024-12-01 11:54:56 +11:00
Jeroen van Rijn 0e3572947a Fix #4508 for abs, min, max (#4516)
* Fix #4508 for abs, min, max and the rest of the builtins.

None of these segfault now:
```odin
package bug

main :: proc() {
	p :: proc() {}

	// _ = len(p())
	// _ = cap(p())

	// _ = size_of(p())
	// _ = align_of(p())

	// T :: struct {}
	// _ = offset_of(p())
	// _ = offset_of(T, p())
	// _ = offset_of(p(), foo)
	// _ = offset_of(p(), "")

	// _ = type_of(p())
	// _ = type_info_of(p())
	// _ = typeid_of(p())

	// A: [4]int
	// _ = swizzle(p())    //  :: proc(x: [N]T, indices: ..int) -> [len(indices)]T ---
	// _ = swizzle(A, p()) //  :: proc(x: [N]T, indices: ..int) -> [len(indices)]T ---

	// _ = complex(p(), p())
	// _ = quaternion(p(), p(), p(), p())
	// _ = quaternion(w=p(), x=p(), y=p(), z=p())

	// _ = real(p())
	// _ = imag(p())
	// _ = jmag(p())
	// _ = kmag(p())
	// _ = conj(p())

	// _ = expand_values(p())

	// _ = min(p())
	// _ = max(p())
	// _ = abs(p())
	// _ = clamp(p(), p(), p())

	// _ = soa_zip(p())
	// _ = soa_unzip(p())
}
```
2024-12-01 11:54:56 +11:00
gingerBill 3c3c59fc03 Allow for odin help build etc 2024-12-01 11:54:56 +11:00
Laytan Laats 1d8eb3aac4 checker: only error with -vet-cast when it is actually castable 2024-12-01 11:54:54 +11:00
gingerBill 514b537dd5 Improve odin help -foo usage 2024-12-01 11:54:54 +11:00
jakubtomsu aaea7b27f2 report error when builtin min/max has 1 (non-type) param 2024-12-01 11:54:54 +11:00
Laytan Laats 468c0b573a add missing macos version 2024-12-01 11:54:54 +11:00
gingerBill 57e0c41982 Make lowercase 2024-12-01 11:54:54 +11:00
gingerBill d613a9ee5a Fix typo 2024-12-01 11:54:54 +11:00
gingerBill e58ac3cb8d Add -linker:<string> to replace -lld and -radlink 2024-12-01 11:54:54 +11:00
gingerBill 95731aceac Disallow -lld and -radlink to be used together 2024-12-01 11:54:54 +11:00
gingerBill ec96939953 Add -radlink 2024-12-01 11:54:53 +11:00
gingerBill e72736a5a8 Remove #relative types from the compiler 2024-12-01 11:54:53 +11:00
gingerBill 31c630dfea Make #relative types an error in parsing 2024-12-01 11:54:53 +11:00
gingerBill 95c812db78 Keep ASAN happy on type assertions 2024-12-01 11:54:53 +11:00
bayo-code 7bd49cf018 Added support for odin build -target:? 2024-12-01 11:54:53 +11:00
bayo-code 9fbde3c1b8 Revert "List the supported targets using odin targets"
This reverts commit b589e3c499.
2024-12-01 11:54:53 +11:00
bayo-code c73c438db9 List the supported targets using odin targets 2024-12-01 11:54:53 +11:00
gingerBill ddca55165d Remove duplicates in -defineables 2024-12-01 11:54:53 +11:00
Jeroen van Rijn 826abd6245 && 2024-12-01 11:54:53 +11:00
Jeroen van Rijn d44f8c377a Phrasing! 2024-12-01 11:54:53 +11:00
Jeroen van Rijn 9ecc378803 Suggest -microarch:native if popcnt instruction is missing.
Fixes #4453.
2024-12-01 11:54:53 +11:00
Morten Hauke Solvang 6c750c6670 Suggestion when assigning enum to bit_set 2024-12-01 11:54:53 +11:00
Dominik Pötzschke a71832570c added braces 2024-12-01 11:54:53 +11:00
Dominik Pötzschke f37ec05548 adjust memory allocation 2024-12-01 11:54:52 +11:00
Dominik Pötzschke 841996435b fix: fix windows params bug 2024-12-01 11:54:52 +11:00
0dminnimda 24ec0f0ebf Revert further simplifiction 2024-12-01 11:54:52 +11:00
0dminnimda a7f32109e8 Simplify further 2024-12-01 11:54:52 +11:00
0dminnimda 4f37b34654 Simplify use of pie 2024-12-01 11:54:52 +11:00
0dminnimda 480f32586e Add support for linking as pie 2024-12-01 11:54:52 +11:00
gingerBill 619b382635 Fix previous commit for arrays 2024-12-01 11:54:52 +11:00
gingerBill 50e46326a6 Fix bug for foo().bar where foo() is a 0-value expression 2024-12-01 11:54:52 +11:00
gingerBill fafac1bc77 Fix auto_cast matrix bug 2024-12-01 11:54:52 +11:00
peachey2k2 186499c8af Add "-build-mode:dynamic" to the "odin help build" output 2024-12-01 11:54:52 +11:00
bobsayshilol 96e6393614 Plug a memory leak
The call to |array_make()| always allocates and since this variable was
unused it lead to a leak. Simply plug it by removing it.
2024-12-01 11:54:52 +11:00
bobsayshilol 73b6461710 Add missing guards around push/pop pragmas
This matches all the other places where we silence Windows warnings.
2024-12-01 11:54:52 +11:00
bobsayshilol 56094f3580 Fix passing nullptr to args marked as non-null
libstdc++'s |memcpy| and |memset| both state that their inputs should
never be a nullptr since this matches the C spec. Some compilers act on
these hints, so we shouldn't unconditionally call these as it would
signal to the compiler that they can't be nullptrs.

As an example, the following code will always call |do_something()|
when compiled with optimisations since GCC version 4.9:
```
    void clear(void *ptr, int size) {
        memset(ptr, 0, size);
    }
    void example(void *ptr, int size) {
        clear(ptr, size);
        if (ptr != nullptr) do_something();
    }
```
2024-12-01 11:54:52 +11:00
bobsayshilol 30fb2ed59d Avoid undefined arithmetic shifting
The result of a left shift on a positive signed integer (Rune) must fit
into an unsigned integer otherwise it's undefined behaviour, as is left
shifting a negative integer by any amount. This code can only be hit if
|x >= 0xf0| and hence a left shift of 31 will always be undefined
unless the input is 0 or 1.

To avoid hitting this we can instead extend the lowest bit to be the
mask if we assume that ints are 2's complement, which we already do
elsewhere. This generates identical code in testing on Compiler
Explorer and the Odin test suite passes locally with this change.

Note that the original code would change to be defined behaviour in
C++20, however we are currently build with |-std=c++14| in the build
scripts.
2024-12-01 11:54:51 +11:00
bobsayshilol ddde456af7 Avoid member access through nullptr in debug
If |result_count| is 0 then |results| will be a nullptr and hence the
access |results->Tuple| is undefined behaviour. There's already an
early return in the 0 branch so move that to be the first thing so that
we can guarantee that it's not a nullptr.

Note that technically we take the address of the result so it's not
actually dereferencing it, however UBSan doesn't care about that.
2024-12-01 11:54:51 +11:00
bobsayshilol b10538da7a Fix invalid union access
UBSan spotted that |src->Basic.kind| had a value outside the range of
|BasicKind| due to it actually being a |Type_Pointer|. Since these are
stored in a union there could be cases where the value of |kind| just
so happens to be |Basic_string|, in which case the branch would have
been taken when it shouldn't have been.

To fix this simply check that it's a |Type_Basic| before treating it as
a |Basic|.
2024-12-01 11:54:51 +11:00
Laytan 7de56ec852 fix #load_directory including nested directories 2024-12-01 11:54:51 +11:00
Jeroen van Rijn c9c237babf match_exact_value: return when type is compound
fixes #4431
2024-12-01 11:54:51 +11:00