https://github.com/aalmkainzi created
https://github.com/llvm/llvm-project/pull/226784
e.g.
```C
void f()
{
struct S { unsigned i : 2; };
struct S s = {};
auto x = s.i; // previously failed. now accepted and x is an `unsigned int`
}
```
Fixes #226280
>From 7c81e84a437e3219045e04acd6643fb080fd7dab Mon Sep 17 00:00:00 2001
From: aalmkainzi <[email protected]>
Date: Sun, 27 Sep 2026 13:38:10 +0300
Subject: [PATCH 1/2] only error out if __auto_type
---
clang/lib/Sema/SemaTemplateDeduction.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp
b/clang/lib/Sema/SemaTemplateDeduction.cpp
index 653240092e64a..5a08eb3196b90 100644
--- a/clang/lib/Sema/SemaTemplateDeduction.cpp
+++ b/clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -5505,7 +5505,8 @@ Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType
&Result,
DeducedFromInitRange = Init->getSourceRange();
}
} else {
- if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {
+ if (!getLangOpts().CPlusPlus && Init->refersToBitField() &&
+ AT->getKeyword() == AutoTypeKeyword::GNUAutoType) {
Diag(Loc, diag::err_auto_bitfield);
return TemplateDeductionResult::AlreadyDiagnosed;
}
>From 767dadc57fddb0b98705630e812484bfcd934c98 Mon Sep 17 00:00:00 2001
From: aalmkainzi <[email protected]>
Date: Sun, 27 Sep 2026 16:14:47 +0300
Subject: [PATCH 2/2] added a test verifying that a bit-field is converted to
its underlying type when type inference
---
clang/test/Sema/c23-auto-bitfield.c | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 clang/test/Sema/c23-auto-bitfield.c
diff --git a/clang/test/Sema/c23-auto-bitfield.c
b/clang/test/Sema/c23-auto-bitfield.c
new file mode 100644
index 0000000000000..0c93897f1ee61
--- /dev/null
+++ b/clang/test/Sema/c23-auto-bitfield.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -std=c23 -fsyntax-only -verify %s
+// expected-no-diagnostics
+
+void f()
+{
+ struct S { unsigned i : 1; };
+ struct S s;
+ auto si = s.i;
+ static_assert(_Generic(si, unsigned int : 1, default : 0), "the underlying
type of the bit-field is 'unsigned int'");
+}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits