Skip to content

Commit 31ab594

Browse files
committed
[ClangImporter] check bit width for bitwise operators
1 parent f7a48a8 commit 31ab594

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

lib/ClangImporter/ImportMacro.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,9 +433,17 @@ static ValueDecl *importMacro(ClangImporter::Implementation &impl,
433433

434434
clang::APValue value;
435435
if (tokenI[1].is(clang::tok::pipe)) {
436-
value = clang::APValue(firstInteger | secondInteger);
436+
if (firstInteger.getBitWidth() == secondInteger.getBitWidth()) {
437+
value = clang::APValue(firstInteger | secondInteger);
438+
} else {
439+
return nullptr;
440+
}
437441
} else if (tokenI[1].is(clang::tok::amp)) {
438-
value = clang::APValue(firstInteger & secondInteger);
442+
if (firstInteger.getBitWidth() == secondInteger.getBitWidth()) {
443+
value = clang::APValue(firstInteger & secondInteger);
444+
} else {
445+
return nullptr;
446+
}
439447
} else if (tokenI[1].is(clang::tok::pipepipe)) {
440448
auto firstBool = firstInteger.getBoolValue();
441449
auto secondBool = firstInteger.getBoolValue();

test/IDE/Inputs/mock-sdk/Foo.framework/Headers/Foo.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ typedef int typedef_int_t;
191191
#define FOO_MACRO_6 ((typedef_int_t) 42)
192192
#define FOO_MACRO_7 ((typedef_int_t) -1)
193193
#define FOO_MACRO_OR (FOO_MACRO_2 | FOO_MACRO_6)
194-
#define FOO_MACRO_AND (FOO_MACRO_2 | FOO_MACRO_6)
194+
#define FOO_MACRO_AND (FOO_MACRO_2 & FOO_MACRO_6)
195+
#define FOO_MACRO_BITWIDTH (FOO_MACRO_4 & FOO_MACRO_5)
195196

196197
#define FOO_MACRO_UNDEF_1 0
197198
#undef FOO_MACRO_UNDEF_1

0 commit comments

Comments
 (0)