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.