<div dir="rtl"><div dir="ltr">Yes, all tests pass now. Thanks!</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div dir="ltr">2014-09-23 3:12 GMT+03:00 Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">r218288 should hopefully fix it.<br>
<br>
On Mon, Sep 22, 2014 at 2:43 PM, Yaron Keren <<a href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> This fails on Visual C++ 2013 update 3, 32 bit:<br>
><br>
> -- Testing: 1 tests, 1 threads --<br>
> FAIL: Clang :: Sema/builtin-object-size.c (1 of 1)<br>
> ******************** TEST 'Clang :: Sema/builtin-object-size.c' FAILED<br>
> ********************<br>
> Script:<br>
> --<br>
> C:/llvm-clean/msvc/RelWithDebInfo/bin/clang.EXE -cc1 -internal-isystem<br>
> C:\llvm-clean\msvc\RelWithDebInfo\bin\..\lib\clang\3.6.0\include<br>
> -fsyntax-only -verify<br>
> C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c<br>
> C:/llvm-clean/msvc/RelWithDebInfo/bin/clang.EXE -cc1 -internal-isystem<br>
> C:\llvm-clean\msvc\RelWithDebInfo\bin\..\lib\clang\3.6.0\include<br>
> -fsyntax-only -triple x86_64-apple-darwin9 -verify<br>
> C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c<br>
> --<br>
> Exit Code: 1<br>
><br>
> Command Output (stdout):<br>
> --<br>
> Command 0: "C:/llvm-clean/msvc/RelWithDebInfo/bin/clang.EXE" "-cc1"<br>
> "-internal-isystem"<br>
> "C:\llvm-clean\msvc\RelWithDebInfo\bin\..\lib\clang\3.6.0\include"<br>
> "-fsyntax-only" "-verify"<br>
> "C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c"<br>
> Command 0 Result: 1<br>
> Command 0 Output:<br>
><br>
><br>
> Command 0 Stderr:<br>
> error: 'warning' diagnostics seen but not expected:<br>
>   File C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c Line 32:<br>
> incompatible redeclaration of library function 'memcpy'<br>
> error: 'note' diagnostics seen but not expected:<br>
>   File C:\llvm-clean\tools\clang\test\Sema\builtin-object-size.c Line 32:<br>
> 'memcpy' is a builtin with type 'void *(void *, const void *, unsigned int)'<br>
> 2 errors generated.<br>
><br>
> Yaron<br>
><br>
><br>
> 2014-09-22 20:12 GMT+03:00 Fariborz Jahanian <<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>>:<br>
>><br>
>> 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:<br>
>> <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>
>> ==============================================================================<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<br>
>> 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:<br>
>> <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>
>> ==============================================================================<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<br>
>> {{'__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,<br>
>> __builtin_object_size(dest, 0))<br>
>> +#define memcpy(dest, src, len) __builtin___memcpy_chk(dest, src, len,<br>
>> __builtin_object_size(dest, 0))<br>
>> +#define memcpy1(dest, src, len) __builtin___memcpy_chk(dest, src, len,<br>
>> __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<br>
>> {{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>
><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>
><br>
</blockquote></div><br></div>