| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
Before, the line number had to start with a nonzero digit. However,
the GCC 11 preprocessor was observed to produce `# 0 ...` directives.
Fixes: #398
|
| |
| |
| |
| |
| |
| | |
The GPL makes sense for whole applications, but the dual-licensed Coq
and OCaml files are more like libraries to be combined with other
code, so the LGPL is more appropriate.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A bitfield assignment `x.b = f()` is expanded into a read-modify-write
on `x.carrier`. Wrong results can occur if `x.carrier` is read before
the call to `f()`, and `f` itself modifies a bitfield with the same
carrier `x.carrier`.
In this temporary fix, we play on the evaluation order implemented by
the SimplExpr pass of CompCert (left-to-right for side-effecting
subexpression) to make sure the read part of the read-modify-write
sequence occurs after the evaluation of the right-hand side.
More substantial fixes will be considered later.
Fixes: #395
|
| |
| |
| |
| | |
Not yet used for optimizations.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The following is correct but was causing a "wrong type for array initializer"
fatal error.
```
struct s { int n; int d[]; };
void f(void) { struct s x = {0}; }
```
Co-authored-by: Michael Schmidt <github@mschmidt.me>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When desugaring a bitfield, allow any integral type that is 32 bits
or smaller. Previously this was checking the rank of the type rather
than the size.
This rank check caused issues with standard headers that
declare `uint32_t` to be an `unsigned long` rather than an
`unsigned int`. Here, any bitfields declared as `uint32_t` were
failing to compile even though they are still actually 32 bits.
Co-authored-by: Amos Robinson <amos@gh.st>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Use pipeline notation `|>` for legibility and better GC behavior
(in bytecode at least).
- Introduce auxiliary functions.
- Remove useless function parameters.
- Fix the timing of the "Emulations" pass
(because of an extra parameter, what was timed took zero time).
|
| |
| |
| |
| |
| |
| |
| |
| | |
After Menhir version 20210310, the `Fail_pr` constructor of the
`parse_result` type becomes `Fail_pr_full` with two extra arguments.
This PR enables CompCert to handle both versions of the `parse_result`
type in MenhirLib.
|
|\ \ |
|
| | | |
|
| | |
| | |
| | |
| | | |
cfrontend/C2C.ml
|
|\ \ \
| |/ /
|/| /
| |/
| |
| |
| |
| |
| | |
PARTIAL MERGE (PARTLY BROKEN).
See unsolved conflicts in: aarch64/TO_MERGE and riscV/TO_MERGE
WARNING:
interface of va_args and assembly sections have changed
|
| |
| |
| |
| |
| | |
The configure script still accepts "macosx" for backward compatibility,
but every other part of CompCert now uses "macos".
|
| |
| |
| |
| |
| |
| |
| | |
Follow-up to 35e2b11db.
Put the warning "pragmas are ignored inside functions" inside the Unnamed
category, so that it is displayed by default and cannot be disabled.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Pragmas can occur either outside external declarations, at the top level
of a compilation unit, or within a compound statement, inside a function
definition.
The parse tree in cparse/C.mli cannot represent pragmas occuring within
a compound statement.
In this case, the elaborator used to silently move the pragma to top
level, just before the function definition where the pragma occurs.
It looks safer to just ignore pragmas occurring inside a function
definition, and emit a specific warning.
|
| |
| |
| |
| |
| | |
This commit adds support for macOS (and probably iOS) running on
AArch64 / ARM 64-bit / "Apple silicon" processors.
|
| |
| |
| |
| |
| | |
All the built-in types declared in $ARCH/CBuiltins.ml are now recognized
as type names initially.
|
| | |
|
|\| |
|
| |
| |
| |
| |
| | |
Also: improve check for ptr - integer.
(Added by Xavier Leroy <xavier.leroy@college-de-france.fr>)
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| | |
Not all pre-processors concatenate string literal lists, however they
are allowed in _Static_assert. This is similar to the rules for inline
assembly etc.
|
| |
| |
| |
| | |
We check that this builtin function is only called from within a variadic
function and has the correct number of arguments.
|
| | |
|
| |
| |
| |
| |
| | |
Added error descriptions for the new syntax errors introduced by
'_Static_assert'.
|
| | |
|
| |
| |
| |
| |
| | |
Returns 1 if the argument is a constant expression, 0 otherwise.
Closes: #366
|
| | |
|
| |
| |
| |
| |
| |
| | |
We check in the initial environment if a function is already defined to
avoid redefinition of functions that are part of the builtin
environment.
|
| | |
|
| |
| |
| |
| |
| | |
The name_of_register and register_of_name function are shared between
all architectures and can be moved in a common file.
|
| |
| |
| |
| |
| |
| |
| | |
The function String.uppercase was deprecated and the replacement
function String.upercase_ascii was only available from OCaml 4.03.0.
Since the minimal OCaml version is now 4.05.0 we can use the function
String.upercase_ascii.
|
| |
| |
| |
| |
| | |
Replace the pattern `try Some (Hashtbl.find ...) with Not_found -> None`
by a call to the function Hashtbl.find_opt.
|
| | |
|
| | |
|
| | |
|
| | |
|
|\ \ |
|
| |\| |
|
| | |
| | |
| | | |
In case of redefinition of a typedef name with a different type.
|
| |\ \
| | |/
| |/|
| | | |
gricad-gitlab.univ-grenoble-alpes.fr:sixcy/CompCert into mppa-work
|
| | |
| | |
| | |
| | | |
See ISO C2011 standard, section 6.4.4.4 para 11.
|
|\ \ \ |
|
| |\| |
| | |/
| |/|
| | | |
mppa-work-upstream-merge
|
| | |
| | |
| | |
| | |
| | |
| | | |
"open!" is the form used in the examples in the OCaml manual.
Based on a quick poll it seems to be the preferred form of the OCaml
core dev team.
|
| | |
| | |
| | |
| | | |
Some preprocessors don't remove the vertical tab from the input
so we should be able to handle them in the lexer.
|
| | | |
|