Author: Mariya Podchishchaeva Date: 2023-05-02T08:23:22-04:00 New Revision: 7133283835fbc260465e899ff86c07202486558a
URL: https://github.com/llvm/llvm-project/commit/7133283835fbc260465e899ff86c07202486558a DIFF: https://github.com/llvm/llvm-project/commit/7133283835fbc260465e899ff86c07202486558a.diff LOG: [clang] Do not attempt to zero-extend _BitInt(1) when not required `ConvertTypeForMem` doesn't return wider type for _BitInt unless it is used in a bitfield, so no need to extend when trying to initialize a global variable. Fixes https://github.com/llvm/llvm-project/issues/62207 Reviewed By: erichkeane, shafik Differential Revision: https://reviews.llvm.org/D149436 Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/CodeGen/CGExprConstant.cpp clang/test/CodeGen/ext-int.c Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 34636faa36bf6..ce3f6351e234d 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -337,6 +337,9 @@ Bug Fixes in This Version (`#62296 <https://github.com/llvm/llvm-project/issues/62296>`_) - Fix a stack overflow issue when evaluating ``consteval`` default arguments. (`#60082` <https://github.com/llvm/llvm-project/issues/60082>`_) +- Fix the assertion hit when generating code for global variable initializer of + _BitInt(1) type. + (`#62207 <https://github.com/llvm/llvm-project/issues/62207>`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index 329e1a27d98fc..5d77e513da5eb 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -1730,7 +1730,7 @@ llvm::Constant *ConstantEmitter::emitForMemory(CodeGenModule &CGM, } // Zero-extend bool. - if (C->getType()->isIntegerTy(1)) { + if (C->getType()->isIntegerTy(1) && !destType->isBitIntType()) { llvm::Type *boolTy = CGM.getTypes().ConvertTypeForMem(destType); return llvm::ConstantExpr::getZExt(C, boolTy); } diff --git a/clang/test/CodeGen/ext-int.c b/clang/test/CodeGen/ext-int.c index 8112d9b044a51..4cb399d108f29 100644 --- a/clang/test/CodeGen/ext-int.c +++ b/clang/test/CodeGen/ext-int.c @@ -3,6 +3,10 @@ // RUN: %clang_cc1 -triple i386-gnu-linux -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,LIN32 // RUN: %clang_cc1 -triple i386-windows-pc -O3 -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,WIN32 +//GH62207 +unsigned _BitInt(1) GlobSize1 = 0; +// CHECK: @GlobSize1 = {{.*}}global i1 false + void GenericTest(_BitInt(3) a, unsigned _BitInt(3) b, _BitInt(4) c) { // CHECK: define {{.*}}void @GenericTest int which = _Generic(a, _BitInt(3): 1, unsigned _BitInt(3) : 2, _BitInt(4) : 3); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits