Author: Timm Bäder
Date: 2024-05-22T13:12:48+02:00
New Revision: f68548135b8f9a02beac842646ab89bcaad9d400

URL: 
https://github.com/llvm/llvm-project/commit/f68548135b8f9a02beac842646ab89bcaad9d400
DIFF: 
https://github.com/llvm/llvm-project/commit/f68548135b8f9a02beac842646ab89bcaad9d400.diff

LOG: [clang][Interp] Fix checking unions for initialization

Added: 
    clang/test/AST/Interp/unions.cpp

Modified: 
    clang/lib/AST/Interp/EvaluationResult.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/EvaluationResult.cpp 
b/clang/lib/AST/Interp/EvaluationResult.cpp
index e92d686c724cc..79f222ce2b30c 100644
--- a/clang/lib/AST/Interp/EvaluationResult.cpp
+++ b/clang/lib/AST/Interp/EvaluationResult.cpp
@@ -115,6 +115,10 @@ static bool CheckFieldsInitialized(InterpState &S, 
SourceLocation Loc,
       DiagnoseUninitializedSubobject(S, Loc, F.Decl);
       Result = false;
     }
+
+    // Only the first member of a union needs to be initialized.
+    if (R->isUnion())
+      break;
   }
 
   // Check Fields in all bases

diff  --git a/clang/test/AST/Interp/unions.cpp 
b/clang/test/AST/Interp/unions.cpp
new file mode 100644
index 0000000000000..08ca39c3cb089
--- /dev/null
+++ b/clang/test/AST/Interp/unions.cpp
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -fexperimental-new-constant-interpreter 
-verify=expected,both %s
+// RUN: %clang_cc1 -verify=ref,both %s
+
+// both-no-diagnostics
+
+union U {
+  int a;
+  int b;
+};
+
+constexpr U a = {12};
+static_assert(a.a == 12, "");
+
+


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to