To protect your data, the CISO officer has suggested users to enable GitLab 2FA as soon as possible.

Commit 3b0d8ee8 authored by qinsoon's avatar qinsoon
Browse files

remove use of anonymous union (clang complains)

parent 3ccffbf2
...@@ -1085,7 +1085,10 @@ namespace Runtime ...@@ -1085,7 +1085,10 @@ namespace Runtime
} }
virtual Any<float> visitFloatBits(UIRParser::FloatBitsContext *context) override { virtual Any<float> visitFloatBits(UIRParser::FloatBitsContext *context) override {
// An unsigned long is at least 32 bits, so cast that to uint32_t and reinterpret that as a float // An unsigned long is at least 32 bits, so cast that to uint32_t and reinterpret that as a float
return ((union {std::uint32_t i; float f;}){(std::uint32_t)std::stoul(accept<std::string>(context->intLiteral()), nullptr, 0)}).f; union my_union { std::uint32_t i; float f; };
my_union u;
u.i = (std::uint32_t)std::stoull(accept<std::string>(context->intLiteral()), nullptr, 0);
return u.f;
} }
virtual Any<double> visitDoubleNumber(UIRParser::DoubleNumberContext *context) override { virtual Any<double> visitDoubleNumber(UIRParser::DoubleNumberContext *context) override {
...@@ -1102,7 +1105,10 @@ namespace Runtime ...@@ -1102,7 +1105,10 @@ namespace Runtime
virtual Any<double> visitDoubleBits(UIRParser::DoubleBitsContext *context) override { virtual Any<double> visitDoubleBits(UIRParser::DoubleBitsContext *context) override {
// An unsigned long is at least 64-bits, so cast that to to a uint64_t and use a union to get the double with the same representation // An unsigned long is at least 64-bits, so cast that to to a uint64_t and use a union to get the double with the same representation
// (Note: there are other ways of doing this, such as by casting pointers/references but the compiler warns against this due to aliasing rules) // (Note: there are other ways of doing this, such as by casting pointers/references but the compiler warns against this due to aliasing rules)
return ((union {std::uint64_t i; double d;}){(std::uint64_t)std::stoull(accept<std::string>(context->intLiteral()), nullptr, 0)}).d; union my_union { std::uint64_t i; double d; };
my_union u;
u.i = (std::uint64_t)std::stoull(accept<std::string>(context->intLiteral()), nullptr, 0);
return u.d;
} }
virtual Any<MuCString> visitStringLiteral(UIRParser::StringLiteralContext *context) override { virtual Any<MuCString> visitStringLiteral(UIRParser::StringLiteralContext *context) override {
...@@ -1377,4 +1383,4 @@ void runtime_compile(MuCtx* ctx, std::string filename) { ...@@ -1377,4 +1383,4 @@ void runtime_compile(MuCtx* ctx, std::string filename) {
::error = true; ::error = true;
else else
Runtime::Visitor(ctx).accept(ir); Runtime::Visitor(ctx).accept(ir);
} }
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment