Date: prev next · Thread: first prev next last
2010 Archives by date, by thread · List index


On Thu, Oct 21, 2010 at 04:08:16AM -0600, Tor Lillqvist wrote:
By the way, note that the OSL_THIS_FUNC currently is quite broken. (Unless somebody has fixed it 
recently in the LibreOffice repo.) See http://www.openoffice.org/issues/show_bug.cgi?id=114290 , 
fixing it is trivialish (an EasyHack?, yeah, I need to add it there).

My problem really is related to this macro.
For some reason, my preprocessor thinks __PRETTY_FUNCTION__ is defined
and I end up with the error in this thread.

For Caolan (and I guess most everyone else), OSL_THIS_FUNC is just
expanded to " " and this problem doesn't appear.

I've prepared a patch like you suggest in the bug report in the hope
that this will make my problem more visible for everyone :)

The attached patch changes my error message in
ucb/source/ucp/file/prov.cxx to:

Compiling: ucb/source/ucp/file/prov.cxx
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx: In member function 'virtual 
com::sun::star::uno::Reference<com::sun::star::ucb::XContent> 
fileaccess::FileProvider::queryContent(const 
com::sun::star::uno::Reference<com::sun::star::ucb::XContentIdentifier>&)':
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: expected 
primary-expression before '(' token
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: expected 
primary-expression before '(' token
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: expected 
primary-expression before ')' token
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: 
'"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:"' cannot be used as a function
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: expected `)' before string 
constant
..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx:342: error: expected `)' before ';' 
token
(same error in lines 533 and 615)

g++ -E gives me for line 342:
        throw IllegalIdentifierException( ::rtl::OUString( 
"..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx" ":" ((const char*) 
(__PRETTY_FUNCTION__)) ":" "342" "; ", 
((sal_Int32)(sizeof("..../build/libreoffice-3.2.99.2/ucb/source/ucp/file/prov.cxx" ":" ((const 
char*) (__PRETTY_FUNCTION__)) ":" "342" "; ")-1)), (((rtl_TextEncoding) 11)) ), uno::Reference< 
uno::XInterface >() );

The patch is attached, but as you see it will need further changes all
around the codebase.

I'll switch diagnose.h (locally) to give " " for OSL_THIS_FUNC, as it
currently seems to do for everyone else.

Tell me what, if anything, of this I shall push.
 Thomas
diff --git a/sal/inc/osl/diagnose.h b/sal/inc/osl/diagnose.h
index cbfabf3..424897b 100644
--- a/sal/inc/osl/diagnose.h
+++ b/sal/inc/osl/diagnose.h
@@ -78,14 +78,14 @@ pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc( pf
 #define OSL_THIS_FILE       __FILE__
 
 /* the macro OSL_THIS_FUNC is intended to be an office internal macro for now */
-#ifdef __func__
-#define OSL_THIS_FUNC __func__
-#elif defined (__PRETTY_FUNCTION__)
-#define OSL_THIS_FUNC __PRETTY_FUNCTION__
-#elif defined (__FUNCTION__)
-#define OSL_THIS_FUNC __FUNCTION__
+#if defined (__GNUC__)
+#  define OSL_THIS_FUNC     ((const char*) (__PRETTY_FUNCTION__))
+#elif defined (_MSC_VER)
+#  define OSL_THIS_FUNC     ((const char*) (__FUNCTION__))
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 19901L
+#  define OSL_THIS_FUNC     ((const char*) (__func__))
 #else
-#define OSL_THIS_FUNC " "
+#  define OSL_THIS_FUNC     ((const char*) (" "))
 #endif
 
 /* the macro OSL_TO_STRING is intended to be an office internal macro for now */

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.