You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using printf("%Zd", somevariable) inside a conditional (that depends on some value from a struct) inside a for loop, the Java Compiler throws a RuntimeError.
example.c
#include <stdint.h>
typedef struct s {
uint32_t i;
} struct_t;
struct In {struct_t s;};
struct Out {uint8_t out;};
void compute(struct In *input, struct Out *output) {
uint32_t i;
struct_t s = input->s;
for (i = 0; i < 30; i++) {
if (i < s.i) {
printf("%Zd", i);
}
}
}
Error
Compiling example.c
Expanding circuit to file example.c.ZAATAR.circuit
Exception in thread "main" java.lang.RuntimeException
at SFE.Compiler.LvalExpression.changeReference(LvalExpression.java:295)
at SFE.Compiler.Operators.PointerAccessOperator.resolve(PointerAccessOperator.java:74)
at SFE.Compiler.Operators.PointerAccessOperator.resolve(PointerAccessOperator.java:37)
at SFE.Compiler.FloatConstant.toFloatConstant(FloatConstant.java:112)
at SFE.Compiler.IntConstant.toIntConstant(IntConstant.java:78)
at SFE.Compiler.PrintfStatement.parseFormatString(PrintfStatement.java:42)
at SFE.Compiler.PrintfStatement.<init>(PrintfStatement.java:25)
at ccomp.parser_hw.CCompiler.builtinFunctionCall(CCompiler.java:1651)
at ccomp.parser_hw.CCompiler.genericFunctionCall(CCompiler.java:1009)
at ccomp.parser_hw.CCompiler.getExpr(CCompiler.java:958)
at ccomp.parser_hw.CCompiler.getExpr(CCompiler.java:793)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:660)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:635)
at ccomp.parser_hw.CCompiler.getExpr(CCompiler.java:851)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:660)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:635)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:635)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:695)
at ccomp.parser_hw.CCompiler.expandStatement(CCompiler.java:635)
at ccomp.parser_hw.CCompiler.access$1100(CCompiler.java:114)
at ccomp.parser_hw.CCompiler$CMainStatement.toAssignmentStatements(CCompiler.java:491)
at SFE.Compiler.BlockStatement.toAssignmentStatements(BlockStatement.java:111)
at SFE.Compiler.FunctionBody.toAssignmentStatements(FunctionBody.java:31)
at zcc.ZCC.compile(ZCC.java:260)
at zcc.ZCC.main(ZCC.java:127)
Variants
Omitting either the for or the if clause, the error will not be thrown.
The error also appears if instead of printing the loop variable i, another variable is used as parameter of printf. For example:
void compute(struct In *input, struct Out *output) {
uint32_t i;
struct_t s = input->s;
uint8_t x = 0;
for (i = 0; i < 30; i++) {
if (i < s.i) {
printf("%Zd", x);
}
}
}
The text was updated successfully, but these errors were encountered:
noresistence
changed the title
printf("%Zd") does not compile inside a conditional inside a for loop
printf("%Zd") does not compile inside a conditional inside a for loop: java.lang.RuntimeException
Mar 20, 2019
If the printf statement is inside a function, which in turn is called inside a conditional branch inside a for loop, the RuntimeException is also thrown during setup.
When using printf("%Zd", somevariable) inside a conditional (that depends on some value from a struct) inside a for loop, the Java Compiler throws a RuntimeError.
example.c
Error
Variants
Omitting either the for or the if clause, the error will not be thrown.
The error also appears if instead of printing the loop variable
i
, another variable is used as parameter of printf. For example:The text was updated successfully, but these errors were encountered: