<div dir="rtl"><div dir="ltr">Hi,</div><div dir="ltr"><br></div><div dir="ltr">This fails on Visual C++ 2013 update 3, 32 bit:</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">-- Testing: 1 tests, 1 threads --</div><div dir="ltr">FAIL: Clang :: Sema/builtin-object-size.c (1 of 1)</div><div dir="ltr">******************** TEST 'Clang :: Sema/builtin-object-size.c' FAILED ********************</div><div dir="ltr">Script:</div><div dir="ltr">--</div><div dir="ltr">C:/llvm-clean/msvc/RelWithDebInfo/bin/clang.EXE -cc1 -internal-isystem C:\llvm-clean\msvc\RelWithDebInfo\bin\..\lib\clang\3.6.0\include -fsyntax-only -verify C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c</div><div dir="ltr">C:/llvm-clean/msvc/RelWithDebInfo/bin/clang.EXE -cc1 -internal-isystem C:\llvm-clean\msvc\RelWithDebInfo\bin\..\lib\clang\3.6.0\include -fsyntax-only -triple x86_64-apple-darwin9 -verify C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c</div><div dir="ltr">--</div><div dir="ltr">Exit Code: 1</div><div dir="ltr"><br></div><div dir="ltr">Command Output (stdout):</div><div dir="ltr">--</div><div dir="ltr">Command 0: "C:/llvm-clean/msvc/RelWithDebInfo/bin/clang.EXE" "-cc1" "-internal-isystem" "C:\llvm-clean\msvc\RelWithDebInfo\bin\..\lib\clang\3.6.0\include" "-fsyntax-only" "-verify" "C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c"</div><div dir="ltr">Command 0 Result: 1</div><div dir="ltr">Command 0 Output:</div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr">Command 0 Stderr:</div><div dir="ltr">error: 'warning' diagnostics seen but not expected:</div><div dir="ltr">  File C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c Line 32: incompatible redeclaration of library function 'memcpy'</div><div dir="ltr">error: 'note' diagnostics seen but not expected:</div><div dir="ltr">  File C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c Line 32: 'memcpy' is a builtin with type 'void *(void *, const void *, unsigned int)'</div><div dir="ltr">2 errors generated.</div><div dir="ltr"><br></div><div>Yaron</div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div dir="ltr">2014-09-22 20:12 GMT+03:00 Fariborz Jahanian <span dir="ltr"><<a href="mailto:fjahanian@apple.com" target="_blank">fjahanian@apple.com</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: fjahanian<br>
Date: Mon Sep 22 12:11:59 2014<br>
New Revision: 218258<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=218258&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=218258&view=rev</a><br>
Log:<br>
Fix evatuated value of __builtin_object_size according to its<br>
'type'  argument when it cannot be determined which objects ptr<br>
points to at compile time. rdar://18334276<br>
<br>
Modified:<br>
    cfe/trunk/lib/AST/ExprConstant.cpp<br>
    cfe/trunk/test/Sema/builtin-object-size.c<br>
<br>
Modified: cfe/trunk/lib/AST/ExprConstant.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=218258&r1=218257&r2=218258&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=218258&r1=218257&r2=218258&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)<br>
+++ cfe/trunk/lib/AST/ExprConstant.cpp Mon Sep 22 12:11:59 2014<br>
@@ -6052,8 +6052,20 @@ bool IntExprEvaluator::TryEvaluateBuilti<br>
       return false;<br>
   }<br>
<br>
-  // If we can prove the base is null, lower to zero now.<br>
-  if (!Base.getLValueBase()) return Success(0, E);<br>
+  if (!Base.getLValueBase()) {<br>
+    // It is not possible to determine which objects ptr points to at compile time,<br>
+    // __builtin_object_size should return (size_t) -1 for type 0 or 1<br>
+    // and (size_t) 0 for type 2 or 3.<br>
+    llvm::APSInt TypeIntVaue;<br>
+    const Expr *ExprType = E->getArg(1);<br>
+    if (!ExprType->EvaluateAsInt(TypeIntVaue, Info.Ctx))<br>
+      return false;<br>
+    if (TypeIntVaue == 0 || TypeIntVaue == 1)<br>
+      return Success(-1, E);<br>
+    if (TypeIntVaue == 2 || TypeIntVaue == 3)<br>
+      return Success(0, E);<br>
+    return Error(E);<br>
+  }<br>
<br>
   QualType T = GetObjectType(Base.getLValueBase());<br>
   if (T.isNull() ||<br>
<br>
Modified: cfe/trunk/test/Sema/builtin-object-size.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/builtin-object-size.c?rev=218258&r1=218257&r2=218258&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/builtin-object-size.c?rev=218258&r1=218257&r2=218258&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Sema/builtin-object-size.c (original)<br>
+++ cfe/trunk/test/Sema/builtin-object-size.c Mon Sep 22 12:11:59 2014<br>
@@ -26,3 +26,20 @@ void f4(const char *fmt, ...) {<br>
  __builtin___vsnprintf_chk (0, 42, 0, 11, fmt, args); // expected-warning {{'__builtin___vsnprintf_chk' will always overflow destination buffer}}<br>
 }<br>
<br>
+// rdar://18334276<br>
+typedef unsigned long size_t;<br>
+void * memcset(void *restrict dst, int src, size_t n);<br>
+void * memcpy(void *restrict dst, const void *restrict src, size_t n);<br>
+<br>
+#define memset(dest, src, len) __builtin___memset_chk(dest, src, len, __builtin_object_size(dest, 0))<br>
+#define memcpy(dest, src, len) __builtin___memcpy_chk(dest, src, len, __builtin_object_size(dest, 0))<br>
+#define memcpy1(dest, src, len) __builtin___memcpy_chk(dest, src, len, __builtin_object_size(dest, 4))<br>
+#define NULL ((void *)0)<br>
+<br>
+void f5(void)<br>
+{<br>
+  char buf[10];<br>
+  memset((void *)0x100000000ULL, 0, 0x1000);<br>
+  memcpy((char *)NULL + 0x10000, buf, 0x10);<br>
+  memcpy1((char *)NULL + 0x10000, buf, 0x10); // expected-error {{argument should be a value from 0 to 3}}<br>
+}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>