Skip to content

Commit 45e874e

Browse files
authored
[clang][bytecode] Check for memcpy/memmove dummy pointers earlier (#121453)
1 parent 641a786 commit 45e874e

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,6 +1863,10 @@ static bool interp__builtin_memcpy(InterpState &S, CodePtr OpPC,
18631863
return false;
18641864
}
18651865

1866+
// Can't read from dummy pointers.
1867+
if (DestPtr.isDummy() || SrcPtr.isDummy())
1868+
return false;
1869+
18661870
QualType DestElemType;
18671871
size_t RemainingDestElems;
18681872
if (DestPtr.getFieldDesc()->isArray()) {
@@ -1925,9 +1929,6 @@ static bool interp__builtin_memcpy(InterpState &S, CodePtr OpPC,
19251929
}
19261930
}
19271931

1928-
// As a last resort, reject dummy pointers.
1929-
if (DestPtr.isDummy() || SrcPtr.isDummy())
1930-
return false;
19311932
assert(Size.getZExtValue() % DestElemSize == 0);
19321933
if (!DoMemcpy(S, OpPC, SrcPtr, DestPtr, Bytes(Size.getZExtValue()).toBits()))
19331934
return false;

clang/test/CodeGen/builtin-memfns.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm < %s| FileCheck %s
2+
// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -fexperimental-new-constant-interpreter < %s| FileCheck %s
23

34
typedef __WCHAR_TYPE__ wchar_t;
45
typedef __SIZE_TYPE__ size_t;

0 commit comments

Comments
 (0)