[llvm-dev] bogus field designator error returned by front-end

martin krastev via llvm-dev llvm-dev at lists.llvm.org
Sat Feb 9 08:12:40 PST 2019


Hi,

Apologies if I got the wrong list for what is essentially a bug report with
the front-end.

The following code (godbolt: https://godbolt.org/z/lT4LIe) breaks with
-DBREAKAGE and compiles without that macro:


struct Value {
  union {
    int i32;
    float f32;
  };
};

template < int >
Value foo()
{
  int acc_i32 = 0;
  float acc_f32 = 0;
  bool isF32 = false;

#if BREAKAGE
  if (isF32) {
    const Value acc = { .f32 = acc_f32 };
    return acc;
  }
#endif

  const Value acc = { .i32 = 32 /*acc_i32*/ };
  return acc;
}

Value bar()
{
  int acc_i32 = 0;
  float acc_f32 = 0;
  bool isF32 = false;

  if (isF32) {
    const Value acc = { .f32 = acc_f32 };
    return acc;
  }

  const Value acc = { .i32 = acc_i32 };
  return acc;
}

Value eval(const int a)
{
  if (a)
    return foo< 42 >(); // error: field designator (null) does not refer to
any field in type..
  else
    return bar();
}

Please note that bar() does not exhibit the problem.

Best regards,
Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190209/14ffa9c9/attachment.html>


More information about the llvm-dev mailing list