On Mon, Jun 29, 2015 at 9:41 PM, David Majnemer <david.majne...@gmail.com> wrote: > Author: majnemer > Date: Mon Jun 29 23:41:18 2015 > New Revision: 241043 > > URL: http://llvm.org/viewvc/llvm-project?rev=241043&view=rev > Log: > [CodeGen] Tweak isTriviallyRecursive further > > isTriviallyRecursive is a hack used to bridge a gap between the > expectations that source code assumes and the semantics that LLVM IR can > provide. Specifically, asm labels on functions are treated as an > explicit name for a GlobalObject in Clang but treated like an > output-processing step in GCC. Tweak this hack a little further to emit > calls to library functions instead of emitting an incorrect definition. > The definition in question would have available_externally linkage (this > is OK) but result in a call to itself which will either result in an > infinite loop or stack overflow. > > This fixes PR23964. > > Modified: > cfe/trunk/lib/CodeGen/CodeGenModule.cpp > cfe/trunk/test/CodeGen/pr9614.c > > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=241043&r1=241042&r2=241043&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) > +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Mon Jun 29 23:41:18 2015 > @@ -1457,12 +1457,7 @@ CodeGenModule::isTriviallyRecursive(cons > Name = FD->getName(); > } > > - auto &BI = Context.BuiltinInfo; > - unsigned BuiltinID = Context.Idents.get(Name).getBuiltinID(); > - if (!BuiltinID || !BI.isPredefinedLibFunction(BuiltinID)) > - return false; > - > - FunctionIsDirectlyRecursive Walker(Name, BI); > + FunctionIsDirectlyRecursive Walker(Name, Context.BuiltinInfo); > Walker.TraverseFunctionDecl(const_cast<FunctionDecl*>(FD)); > return Walker.Result; > } > > Modified: cfe/trunk/test/CodeGen/pr9614.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pr9614.c?rev=241043&r1=241042&r2=241043&view=diff > ============================================================================== > --- cfe/trunk/test/CodeGen/pr9614.c (original) > +++ cfe/trunk/test/CodeGen/pr9614.c Mon Jun 29 23:41:18 2015 > @@ -18,11 +18,16 @@ prefetch(void) { > __builtin_prefetch(0, 0, 1); > } > > +extern inline __attribute__((__always_inline__, __gnu_inline__)) void > *memchr(void *__s, int __c, __SIZE_TYPE__ __n) { > + return __builtin_memchr(__s, __c, __n); > +} > + > void f(void) { > foo(); > abs(0); > strrchr_foo("", '.'); > prefetch(); > + memchr("", '.', 0); > } > > // CHECK-LABEL: define void @f() > @@ -30,9 +35,11 @@ void f(void) { > // CHECK: call i32 @abs(i32 0) > // CHECK: call i8* @strrchr( > // CHECK: call void @llvm.prefetch( > +// CHECK: call i8* @memchr( > // CHECK: ret void > > // CHECK: declare void @foo() > // CHECK: declare i32 @abs(i32 > // CHECK: declare i8* @strrchr(i8*, i32) > +// CHECK: declare i8* @memchr( > // CHECK: declare void @llvm.prefetch( >
Is test/CodeGen/pr9614.c compiled with -fno-builtin? If not, PR23964 won't be tested. -- H.J. _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits