Uninitialized garbage on ia64 can be deadly (2004)

Developers ignored return values; IA64 turned them into crash fuel, and the crowd gloats

TLDR: A resurrected post warns that casting a “void” function into Windows threads seemed harmless, but on Intel’s IA64 chip a “Not a Thing” bit can turn ignored returns into crashes. Commenters pile on IA64 as a flop, with a few noting its parallel ideas live on in GPUs; lesson: shortcuts can bite.

Raymond Chen dusted off a 2004 warning and the internet did what it does best: roast an oddball chip. The gist: some Windows devs cast a “void” function into CreateThread and shrug at the junk return value. On Intel’s long-gone IA64, a quirky extra bit called NaT (“Not a Thing”) marks data as invalid—and that “junk” can snowball into a faceplant. Even official samples got it wrong. Cue the popcorn.

Commenters came out swinging. One called IA64 a “design disaster,” another declared it “utterly failed long ago,” and a third said they’re “baffled” Intel thought people would switch from regular PCs to this experimental beast. The vibe? A collective “told you so,” with bonus laughs about a “65-bit register” carrying a not-a-thing hangover.

But it wasn’t all jeers. A few voices added nuance: that IA64’s super-parallel style (think many things at once) made more sense in GPUs than in everyday computers. Others linked to Chen’s deep-dive series and highlighted the moral of the story—shortcuts that “work” on everyday machines can blow up on stricter ones. The drama lands perfectly: ancient chip, modern lesson, and a comments section gleefully turning NaT into “Not a Chance.”

Key Points

  • CreateThread requires a LPTHREAD_START_ROUTINE with signature DWORD CALLBACK ThreadProc(LPVOID).
  • Casting a void-returning function to LPTHREAD_START_ROUTINE is a common mistake that can crash on Win64.
  • IA-64 registers have an extra NaT bit indicating invalid data, often set by failed speculative loads.
  • Arithmetic on NaT propagates NaT, and validation via chk.s can trigger a page fault if needed.
  • Speculative execution on IA-64 illustrates why “garbage” return values are not harmless in thread entry functions.

Hottest takes

"IA64 utterly failed long ago" — vardump
"Yet another reason IA64 was a design disaster" — ronsor
"very poorly suited for general-purpose computations" — Joker_vD
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.