Jextract does not handle fields with an array type that contains an inline struct declaration:
struct Foo {
struct {
int x;
} nested[1];
};
This fails with:
java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:143)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.DeclarationImpl$JavaName.getFullNameOrThrow(DeclarationImpl.java:392)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.ClassSourceBuilder.layoutString(ClassSourceBuilder.java:197)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.ClassSourceBuilder.layoutString(ClassSourceBuilder.java:201)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.structOrUnionLayoutString(StructBuilder.java:311)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.structOrUnionLayoutString(StructBuilder.java:275)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.emitLayoutDecl(StructBuilder.java:249)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.begin(StructBuilder.java:83)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.ToplevelBuilder.addStruct(ToplevelBuilder.java:138)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.visitScoped(OutputFactory.java:99)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.visitScoped(OutputFactory.java:43)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.DeclarationImpl$ScopedImpl.accept(DeclarationImpl.java:256)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.generateDecl(OutputFactory.java:71)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.generate(OutputFactory.java:64)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.generateWrapped(OutputFactory.java:53)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.CodeGenerator.generate(CodeGenerator.java:47)
at org.openjdk.jextract@21/org.openjdk.jextract.JextractTool.generateInternal(JextractTool.java:127)
at org.openjdk.jextract@21/org.openjdk.jextract.JextractTool.run(JextractTool.java:477)
at org.openjdk.jextract@21/org.openjdk.jextract.JextractTool.main(JextractTool.java:175)
struct Foo {
struct {
int x;
} nested[1];
};
This fails with:
java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:143)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.DeclarationImpl$JavaName.getFullNameOrThrow(DeclarationImpl.java:392)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.ClassSourceBuilder.layoutString(ClassSourceBuilder.java:197)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.ClassSourceBuilder.layoutString(ClassSourceBuilder.java:201)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.structOrUnionLayoutString(StructBuilder.java:311)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.structOrUnionLayoutString(StructBuilder.java:275)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.emitLayoutDecl(StructBuilder.java:249)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.StructBuilder.begin(StructBuilder.java:83)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.ToplevelBuilder.addStruct(ToplevelBuilder.java:138)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.visitScoped(OutputFactory.java:99)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.visitScoped(OutputFactory.java:43)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.DeclarationImpl$ScopedImpl.accept(DeclarationImpl.java:256)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.generateDecl(OutputFactory.java:71)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.generate(OutputFactory.java:64)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.OutputFactory.generateWrapped(OutputFactory.java:53)
at org.openjdk.jextract@21/org.openjdk.jextract.impl.CodeGenerator.generate(CodeGenerator.java:47)
at org.openjdk.jextract@21/org.openjdk.jextract.JextractTool.generateInternal(JextractTool.java:127)
at org.openjdk.jextract@21/org.openjdk.jextract.JextractTool.run(JextractTool.java:477)
at org.openjdk.jextract@21/org.openjdk.jextract.JextractTool.main(JextractTool.java:175)