diff --git a/Cesium.CodeGen/Ir/Expressions/IdentifierExpression.cs b/Cesium.CodeGen/Ir/Expressions/IdentifierExpression.cs index 2ee83078..0a85a8fb 100644 --- a/Cesium.CodeGen/Ir/Expressions/IdentifierExpression.cs +++ b/Cesium.CodeGen/Ir/Expressions/IdentifierExpression.cs @@ -53,12 +53,6 @@ public IValue Resolve(IDeclarationScope scope) if (var is not null && par is not null) throw new CompilationException($"Variable {Identifier} is both available as a local and as a function parameter."); - if (var is not null && fun is not null) - throw new CompilationException($"Variable {Identifier} is both available as a local and as a function name."); - - if (fun is not null && par is not null) - throw new CompilationException($"Variable {Identifier} is both available as a function name and as a function parameter."); - if (var is not null) { if (var.StorageClass == Declarations.StorageClass.Auto) diff --git a/Cesium.IntegrationTests/functions.c b/Cesium.IntegrationTests/functions.c index f4ca4381..e9b17c7e 100644 --- a/Cesium.IntegrationTests/functions.c +++ b/Cesium.IntegrationTests/functions.c @@ -1,6 +1,22 @@ void forward_declaration_void_1(); void forward_declaration_void_2(void); +void test(void) +{ +} + +int function_with_parameter(int test) +{ + int y = test + 10; + return y; +} + +int function_with_variable(int y) +{ + int test = y + 10; + return test; +} + void declaration_void(void) { } @@ -10,6 +26,8 @@ int foo() declaration_void(); forward_declaration_void_1(); forward_declaration_void_2(); + if (function_with_parameter(10) != 20) return -1; + if (function_with_variable(15) != 25) return -1; return 42; }