From 19417cdd52a02c06f383b5bda8693e44d7cb30c8 Mon Sep 17 00:00:00 2001 From: visualfc Date: Mon, 31 Mar 2025 17:06:15 +0800 Subject: [PATCH] compiler: check wasm sizes --- compiler/internal/build/build.go | 7 ++++++- compiler/internal/packages/load.go | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/compiler/internal/build/build.go b/compiler/internal/build/build.go index 75f2617d..318d091b 100644 --- a/compiler/internal/build/build.go +++ b/compiler/internal/build/build.go @@ -153,7 +153,12 @@ func Do(args []string, conf *Config) ([]Package, error) { } prog := llssa.NewProgram(target) - sizes := prog.TypeSizes + sizes := func(sizes types.Sizes, compiler, arch string) types.Sizes { + if arch == "wasm" && os.Getenv("LLGO_WASM32") == "1" { + sizes = &types.StdSizes{4, 4} + } + return prog.TypeSizes(sizes) + } dedup := packages.NewDeduper() dedup.SetPreload(func(pkg *types.Package, files []*ast.File) { if llruntime.SkipToBuild(pkg.Path()) { diff --git a/compiler/internal/packages/load.go b/compiler/internal/packages/load.go index beeb6bdf..7ae5fb43 100644 --- a/compiler/internal/packages/load.go +++ b/compiler/internal/packages/load.go @@ -705,7 +705,7 @@ func refineEx(dedup Deduper, ld *loader, response *packages.DriverResponse) ([]* // return an error. Clients may need to handle such errors before // proceeding with further analysis. The PrintErrors function is // provided for convenient display of all errors. -func LoadEx(dedup Deduper, sizes func(types.Sizes) types.Sizes, cfg *Config, patterns ...string) ([]*Package, error) { +func LoadEx(dedup Deduper, sizes func(sizes types.Sizes, compiler, arch string) types.Sizes, cfg *Config, patterns ...string) ([]*Package, error) { ld := newLoader(cfg) response, external, err := defaultDriver(&ld.Config, patterns...) if err != nil { @@ -732,7 +732,7 @@ func LoadEx(dedup Deduper, sizes func(types.Sizes) types.Sizes, cfg *Config, pat } if sizes != nil { - ld.sizes = sizes(ld.sizes) + ld.sizes = sizes(ld.sizes, response.Compiler, response.Arch) } return refineEx(dedup, ld, response) }