You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openoffice.apache.org by bu...@apache.org on 2016/03/25 17:01:27 UTC
[Issue 126890] New: compiling with recent clang generates thousands
of infinite-recursion warnings about DbgOut()
https://bz.apache.org/ooo/show_bug.cgi?id=126890
Issue ID: 126890
Issue Type: DEFECT
Summary: compiling with recent clang generates thousands of
infinite-recursion warnings about DbgOut()
Product: Build Tools
Version: 4.2.0-dev
Hardware: All
OS: All
Status: CONFIRMED
Severity: Normal
Priority: P5 (lowest)
Component: code
Assignee: issues@openoffice.apache.org
Reporter: truckman@apache.org
Created attachment 85368
--> https://bz.apache.org/ooo/attachment.cgi?id=85368&action=edit
patch to fix DbgOut() infinite recursion warnings when compiling
sal/inc/rtl/string.hxx with recent clang
When compiling OpenOffice with recent versions of clang, 7735 warnings that
look like this:
In file included from
/tmp/openoffice/aoo-4.2.0/main/sal/osl/unx/file_path_helper.cxx:36:
In file included from ./file_path_helper.hxx:32:
In file included from ../../inc/rtl/ustring.hxx:33:
../../inc/rtl/string.hxx:973:2: warning: all paths through this function will
call itself [-Winfinite-recursion]
{ DbgOut( rMessage.getStr(), nOutType, pFileName, nLineNum); }
^
1 warning generated.
The problem is in this block of code in sal/inc/rtl/string.hxx:
inline void DbgOut( const rtl::OString& rMessage, sal_uInt16 nOutType, const
sal_Char* pFileName, sal_uInt16 nLineNum )
{ DbgOut( rMessage.getStr(), nOutType, pFileName, nLineNum); }
It appears to be trying to use function overloading to create a wrapper that
calls a different flavor of DbgOut() that is declared in view
tools/inc/tools/debug.hxx:
TOOLS_DLLPUBLIC void DbgOut( const sal_Char* pMsg, sal_uInt16 nOutType =
DBG_OUT_TRACE,
const sal_Char* pFile = NULL, sal_uInt16 nLine = 0 );
If the compiler has not yet encountered the latter before it compiles the code
in string.hxx, then it decides is must convert the char * first argument in the
inner cal back to rtl::OString& and call DbgOut() recursively.
In a normal build, this will always happen because the declaration in debug.hxx
is conditional on the definition of the DBG_UTIL preprocessor symbol, which is
undefined in normal builds. Fix the problem in this case by protecting the the
declaration in string.hxx with #ifdef DBG_UTIL. Fortunately there should not be
any users of the string.hxx version of DbgOut() in this case.
The --enable-dbgutil configure option causes DBG_UTIL. In this case the
problem will be triggered if <tools/debug.hxx> is not included before
<rtl/string.hxx> and there is no guarantee of that. Fix the problem in this
case by including <tools/debug.hxx> inside <rtl/string.hxx>. This requires
adding a couple of directories to the include path because not all users of
<rtl/string.hxx> have done so, probably because they are not using any DBG_UTIL
features.
--
You are receiving this mail because:
You are the assignee for the issue.
[Issue 126890] compiling with recent clang generates thousands of
infinite-recursion warnings about DbgOut()
Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126890
Don Lewis <tr...@apache.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Developer|--- |Simple
Difficulty| |
Assignee|issues@openoffice.apache.or |truckman@apache.org
|g |
Target Milestone|--- |4.2.0
--
You are receiving this mail because:
You are the assignee for the issue.