Skip to content

Any export called @"" is not exported #12230

@ghost

Description

Zig Version

0.10.0-dev.2836+2360f8c49

Steps to Reproduce

Exporting anything identified by @"" exports nothing. on wasm32, x86_64, aarch64, probably all platforms.

export const @"": u16 = 12345;

Expected Behavior

@"" is rejected as an identifier for exports. It's simply not representable. What is the compiler supposed to call it?

Additionally, any opinions on disallowing @"" as an identifier in general? Are there any use cases? It is inexpressive. What is @"" even supposed to mean? Disallowing it altogether might be more consistent. (nvm, I don't think this is good actually, could be missing some edge cases etc.)

See also: #8262

Actual Behavior

stage1

Exporting anything identified by @"" exports nothing. on wasm32, x86_64, aarch64, probably all platforms.

export const @"": u16 = 12345;
$ zig build-lib -dynamic -target wasm32-freestanding -OReleaseSmall --strip x.zig; wasm2wat x.wasm
(module
  (memory (;0;) 1)
  (global (;0;) (mut i32) (i32.const 65536))
  (export "memory" (memory 0)))

12345 is nowhere to be found. Change @"" to @"x" and it's included.

$ zig build-lib -dynamic -target x86_64-freestanding -OReleaseSmall --strip x.zig -femit-asm; cat x.s
	.text
	.intel_syntax noprefix
	.file	"x"
	.section	".note.GNU-stack","",@progbits

12345 is nowhere to be found. Change @"" to @"x" and it's included.

stage2

$ zig build-lib -dynamic -target wasm32-freestanding -OReleaseSmall --strip -fno-stage1 x.zig; wasm2wat x.wasm
(module
  (memory (;0;) 2)
  (global (;0;) (mut i32) (i32.const 65536))
  (global (;1;) i32 (i32.const 65536))
  (export "memory" (memory 0))
  (export "test." (global 1))
  (data (;0;) (i32.const 65536) "90"))

In stage2 it is somehow exported as "test.", which is very weird.
Additionally if you add -femit-asm to this one, it doesn't work. It works without -fno-stage1.

All this is unexpected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behaviorfrontendTokenization, parsing, AstGen, Sema, and Liveness.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions