From c579118ce6212cf29607e61a9d3a76440604d6da Mon Sep 17 00:00:00 2001 From: David Truby Date: Mon, 30 Sep 2019 12:41:34 +0100 Subject: [PATCH] [flang] Replace access through union with reinterpret_cast. This avoids undefined behaviour. Original-commit: flang-compiler/f18@e289bbfa83ebb818971a688b019be697fd900d62 Reviewed-on: https://github.com/flang-compiler/f18/pull/767 Tree-same-pre-rewrite: false --- flang/lib/evaluate/intrinsics-library-templates.h | 14 ++------------ flang/lib/evaluate/intrinsics-library.h | 2 +- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/flang/lib/evaluate/intrinsics-library-templates.h b/flang/lib/evaluate/intrinsics-library-templates.h index 73f51b4..0d4f48c 100644 --- a/flang/lib/evaluate/intrinsics-library-templates.h +++ b/flang/lib/evaluate/intrinsics-library-templates.h @@ -129,23 +129,13 @@ template struct CallableHostWrapper { template inline GenericFunctionPointer ToGenericFunctionPointer( FuncPointer f) { - union { - GenericFunctionPointer gp; - FuncPointer fp; - } u; - u.fp = f; - return u.gp; + return reinterpret_cast(f); } template inline FuncPointer FromGenericFunctionPointer( GenericFunctionPointer g) { - union { - GenericFunctionPointer gp; - FuncPointer fp; - } u; - u.gp = g; - return u.fp; + return reinterpret_cast>(g); } template diff --git a/flang/lib/evaluate/intrinsics-library.h b/flang/lib/evaluate/intrinsics-library.h index 10aeeb5..28a83e4 100644 --- a/flang/lib/evaluate/intrinsics-library.h +++ b/flang/lib/evaluate/intrinsics-library.h @@ -35,7 +35,7 @@ class FoldingContext; using TypeCode = unsigned char; template using FuncPointer = TR (*)(TA...); -using GenericFunctionPointer = FuncPointer; +using GenericFunctionPointer = void (*) (void); enum class PassBy { Ref, Val }; template struct ArgumentInfo { -- 2.7.4