From 41011f6706e37cecab4797e4e95a9273ca999930 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Thu, 25 Jun 2015 23:50:40 +0000 Subject: [CodeGen] Restrict isTriviallyRecursive to predefined lib functions forwarding to lib functions isTriviallyRecursive is only supposed to guard functions part of the implementation. This fixes PR23953. llvm-svn: 240735 --- clang/lib/CodeGen/CodeGenModule.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index bd7b44e..d19d0ed 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1425,7 +1425,7 @@ namespace { return false; } unsigned BuiltinID = FD->getBuiltinID(); - if (!BuiltinID) + if (!BuiltinID || !BI.isLibFunction(BuiltinID)) return true; StringRef BuiltinName = BI.GetName(BuiltinID); if (BuiltinName.startswith("__builtin_") && @@ -1454,7 +1454,12 @@ CodeGenModule::isTriviallyRecursive(const FunctionDecl *FD) { Name = FD->getName(); } - FunctionIsDirectlyRecursive Walker(Name, Context.BuiltinInfo); + auto &BI = Context.BuiltinInfo; + unsigned BuiltinID = Context.Idents.get(Name).getBuiltinID(); + if (!BuiltinID || !BI.isPredefinedLibFunction(BuiltinID)) + return false; + + FunctionIsDirectlyRecursive Walker(Name, BI); Walker.TraverseFunctionDecl(const_cast(FD)); return Walker.Result; } -- cgit v1.1