ObjFW runtime: Add objc_msg_lookup(_super)_{fp,st}ret

Eli Friedman eli.friedman at gmail.com
Thu Jul 18 18:02:44 PDT 2013


On Wed, Jul 17, 2013 at 2:06 AM, Jonathan Schleifer <js at webkeks.org> wrote:
> Ok, now this is interesting:
>
>> avalon:CodeGenObjC$ ../../../../build/Release+Asserts/bin/llvm-lit -sv stret_lookup.m
>> llvm-lit: lit.cfg:184: note: using clang: '/Users/js/Devel/LLVM/build/Release+Asserts/bin/clang'
>> FAIL: Clang :: CodeGenObjC/stret_lookup.m (1 of 1)
>> ******************** TEST 'Clang :: CodeGenObjC/stret_lookup.m' FAILED ********************
>> Script:
>> --
>> /Users/js/Devel/LLVM/build/Release+Asserts/bin/clang -cc1 -internal-isystem /Users/js/Devel/LLVM/build/Release+Asserts/bin/../lib/clang/3.4/include -DSTRET -triple x86_64-pc-linux-gnu -fobjc-runtime=objfw -emit-llvm -o - /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m | FileCheck -check-prefix=STRET /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m
>> /Users/js/Devel/LLVM/build/Release+Asserts/bin/clang -cc1 -internal-isystem /Users/js/Devel/LLVM/build/Release+Asserts/bin/../lib/clang/3.4/include -triple x86_64-pc-linux-gnu -fobjc-runtime=gcc -emit-llvm -o - /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m | FileCheck -check-prefix=NOSTRET /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m
>> --
>> Exit Code: 1
>> Command Output (stderr):
>> --
>> /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m:26:13: error: expected string not found in input
>> // NOSTRET: define void @test0()
>>             ^
>> <stdin>:34:86: note: scanning from here
>>  call void %1(%struct.test* sret %tmp, i8* bitcast (i64* @_OBJC_CLASS_Test0 to i8*), i8* bitcast ([2 x { i8*, i8* }]* @.objc_selector_list to i8*)), !GNUObjCMessageSend !0
>>                                                                                      ^
>> <stdin>:48:1: note: possible intended match here
>> declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1
>> ^
>> --
>>
>> ********************
>> Testing Time: 0.04s
>> ********************
>> Failing Tests (1):
>>     Clang :: CodeGenObjC/stret_lookup.m
>>
>>   Unexpected Failures: 1
>
> You see, it's not even finding @test0(). That seemed like a bug to me, so I tried manually executing the command line it printed:
>
>> /Users/js/Devel/LLVM/build/Release+Asserts/bin/clang -cc1 -internal-isystem /Users/js/Devel/LLVM/build/Release+Asserts/bin/../lib/clang/3.4/include -triple x86_64-pc-linux-gnu -fobjc-runtime=gcc -emit-llvm -o - /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m | FileCheck -check-prefix=NOSTRET /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m
>
>
> Ok, so let's fix the path for FileCheck:
>
>> avalon:CodeGenObjC$ /Users/js/Devel/LLVM/build/Release+Asserts/bin/clang -cc1 -internal-isystem /Users/js/Devel/LLVM/build/Release+Asserts/bin/../lib/clang/3.4/include -triple x86_64-pc-linux-gnu -fobjc-runtime=gcc -emit-llvm -o - /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m | ../../../../build/Release+Asserts/bin/FileCheck -check-prefix=NOSTRET /Users/js/Devel/LLVM/tools/clang/test/CodeGenObjC/stret_lookup.m
>> avalon:CodeGenObjC$ echo $?
>> 0
>
> And it suddenly works. Is it possible that llvm-lit is buggy and calls another FileCheck or changes something in the environment like add DYLD_INSERT_LIBRARIES that screw things up? Where does it look for FileCheck? I can only find build/Release+Asserts/bin/FileCheck. Does FileCheck come with Xcode and maybe it tries to use that instead?
>
> Anyway, I guess this means my tests are correct, right? So, can this get in once I add the documentation?

Ah, I figured out what's happening.  The other invocation is the one
that's failing.  Try changing your "STRET" prefix to "HASSTRET". :)

-Eli




More information about the cfe-commits mailing list