mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 03:51:18 +00:00
Recursive definition of tag not detected with nested tag/tagof #2790
This commit is contained in:
@@ -104,6 +104,7 @@
|
||||
- Using an optional type as generic parameter was not properly caught #2799
|
||||
- Instantiating an alias of a user-defined type was not properly caught #2798
|
||||
- Too deeply nested scopes was a fatal crash and not a regular semantic error. #2796
|
||||
- Recursive definition of tag not detected with nested tag/tagof #2790
|
||||
|
||||
### Stdlib changes
|
||||
- Add `ThreadPool` join function to wait for all threads to finish in the pool without destroying the threads.
|
||||
|
||||
@@ -3604,6 +3604,8 @@ static inline bool sema_expr_analyse_typecall(SemaContext *context, Expr *expr)
|
||||
{
|
||||
Expr *tag = exprptr(expr->call_expr.function);
|
||||
expr->call_expr.arguments = sema_expand_vasplat_exprs(context, expr->call_expr.arguments);
|
||||
Decl *decl = tag->type_call_expr.type;
|
||||
if (decl && !sema_analyse_decl(context, decl)) return false;
|
||||
switch (tag->type_call_expr.property)
|
||||
{
|
||||
case TYPE_PROPERTY_FROM_ORDINAL:
|
||||
@@ -3626,7 +3628,6 @@ static inline bool sema_expr_analyse_typecall(SemaContext *context, Expr *expr)
|
||||
{
|
||||
RETURN_SEMA_ERROR(key, "The tag name should be a string constant.");
|
||||
}
|
||||
Decl *decl = tag->type_call_expr.type;
|
||||
const char *tagname = key->const_expr.bytes.ptr;
|
||||
if (!decl) goto NOT_FOUND;
|
||||
ASSERT_SPAN(expr, decl->resolved_attributes);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
struct Foo @tag("", Foo.tagof("")) // #error: Recursive definition of 'Foo'.
|
||||
{
|
||||
}
|
||||
fn int main() => 1;
|
||||
Reference in New Issue
Block a user