diff options
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
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<FunctionDecl*>(FD)); return Walker.Result; } |