xref: /llvm-project/clang/test/Sema/format-strings-bitfield-promotion.cxx (revision 94d2d09c7626dd6642d322da0bb2faf629447a62)
1*94d2d09cSAaron Ballman // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -verify %s
2*94d2d09cSAaron Ballman // RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -fsyntax-only -verify %s
3*94d2d09cSAaron Ballman 
4*94d2d09cSAaron Ballman // In C++, the bitfield promotion from long to int does not occur, unlike C.
5*94d2d09cSAaron Ballman // expected-no-diagnostics
6*94d2d09cSAaron Ballman 
7*94d2d09cSAaron Ballman int printf(const char *restrict, ...);
8*94d2d09cSAaron Ballman 
9*94d2d09cSAaron Ballman struct bitfields {
10*94d2d09cSAaron Ballman   long a : 2;
11*94d2d09cSAaron Ballman   unsigned long b : 2;
12*94d2d09cSAaron Ballman   long c : 32;          // assumes that int is 32 bits
13*94d2d09cSAaron Ballman   unsigned long d : 32; // assumes that int is 32 bits
14*94d2d09cSAaron Ballman } bf;
15*94d2d09cSAaron Ballman 
bitfield_promotion()16*94d2d09cSAaron Ballman void bitfield_promotion() {
17*94d2d09cSAaron Ballman   printf("%ld", bf.a);
18*94d2d09cSAaron Ballman   printf("%lu", bf.b);
19*94d2d09cSAaron Ballman   printf("%ld", bf.c);
20*94d2d09cSAaron Ballman   printf("%lu", bf.d);
21*94d2d09cSAaron Ballman }
22