Skip to content

Commit b71d318

Browse files
committed
Remove code that may cause ODR violation due to how it was precompiled vs how it gets used
1 parent 32f3a16 commit b71d318

File tree

3 files changed

+192
-186
lines changed

3 files changed

+192
-186
lines changed

api/include/opentelemetry/common/macros.h

Lines changed: 128 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@
1414
Note: Use this macro to avoid an extra level of #ifdef __has_builtin check.
1515
http://releases.llvm.org/3.3/tools/clang/docs/LanguageExtensions.html
1616
*/
17-
#if !defined(OPENTELEMETRY_HAVE_BUILTIN)
18-
# ifdef __has_builtin
19-
# define OPENTELEMETRY_HAVE_BUILTIN(x) __has_builtin(x)
20-
# else
21-
# define OPENTELEMETRY_HAVE_BUILTIN(x) 0
22-
# endif
23-
#endif
24-
25-
#if !defined(OPENTELEMETRY_HAVE_FEATURE)
26-
# ifdef __has_feature
27-
# define OPENTELEMETRY_HAVE_FEATURE(f) __has_feature(f)
28-
# else
29-
# define OPENTELEMETRY_HAVE_FEATURE(f) 0
30-
# endif
31-
#endif
17+
// #if !defined(OPENTELEMETRY_HAVE_BUILTIN)
18+
// # ifdef __has_builtin
19+
// # define OPENTELEMETRY_HAVE_BUILTIN(x) __has_builtin(x)
20+
// # else
21+
// # define OPENTELEMETRY_HAVE_BUILTIN(x) 0
22+
// # endif
23+
// #endif
24+
25+
// #if !defined(OPENTELEMETRY_HAVE_FEATURE)
26+
// # ifdef __has_feature
27+
// # define OPENTELEMETRY_HAVE_FEATURE(f) __has_feature(f)
28+
// # else
29+
// # define OPENTELEMETRY_HAVE_FEATURE(f) 0
30+
// # endif
31+
// #endif
3232

3333
/*
3434
has feature
@@ -44,13 +44,13 @@
4444
GCC: https://gcc.gnu.org/gcc-5/changes.html
4545
Clang: https://clang.llvm.org/docs/LanguageExtensions.html
4646
*/
47-
#if !defined(OPENTELEMETRY_HAVE_ATTRIBUTE)
48-
# ifdef __has_attribute
49-
# define OPENTELEMETRY_HAVE_ATTRIBUTE(x) __has_attribute(x)
50-
# else
51-
# define OPENTELEMETRY_HAVE_ATTRIBUTE(x) 0
52-
# endif
53-
#endif
47+
// #if !defined(OPENTELEMETRY_HAVE_ATTRIBUTE)
48+
// # ifdef __has_attribute
49+
// # define OPENTELEMETRY_HAVE_ATTRIBUTE(x) __has_attribute(x)
50+
// # else
51+
// # define OPENTELEMETRY_HAVE_ATTRIBUTE(x) 0
52+
// # endif
53+
// #endif
5454

5555
/*
5656
OPENTELEMETRY_HAVE_CPP_ATTRIBUTE
@@ -60,15 +60,15 @@
6060
(https://en.cppreference.com/w/cpp/experimental/feature_test). If we don't
6161
find `__has_cpp_attribute`, will evaluate to 0.
6262
*/
63-
#if !defined(OPENTELEMETRY_HAVE_CPP_ATTRIBUTE)
64-
# if defined(__cplusplus) && defined(__has_cpp_attribute)
65-
// NOTE: requiring __cplusplus above should not be necessary, but
66-
// works around https://bugs.llvm.org/show_bug.cgi?id=23435.
67-
# define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
68-
# else
69-
# define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) 0
70-
# endif
71-
#endif
63+
// #if !defined(OPENTELEMETRY_HAVE_CPP_ATTRIBUTE)
64+
// # if defined(__cplusplus) && defined(__has_cpp_attribute)
65+
// // NOTE: requiring __cplusplus above should not be necessary, but
66+
// // works around https://bugs.llvm.org/show_bug.cgi?id=23435.
67+
// # define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
68+
// # else
69+
// # define OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(x) 0
70+
// # endif
71+
// #endif
7272

7373
/*
7474
Expected usage pattern:
@@ -401,24 +401,24 @@ point.
401401
// * The `noexcept` operator may still return `false`.
402402
//
403403
// For further details, consult the compiler's documentation.
404-
#ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
405-
# if defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__) < 306
406-
// Clang < 3.6
407-
// http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro
408-
# if defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
409-
# define OPENTELEMETRY_HAVE_EXCEPTIONS 1
410-
# endif // defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
411-
# elif OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
412-
# define OPENTELEMETRY_HAVE_EXCEPTIONS 1
413-
// Handle remaining special cases and default to exceptions being supported.
414-
# elif !(defined(__GNUC__) && !defined(__EXCEPTIONS) && !defined(__cpp_exceptions)) && \
415-
!(defined(_MSC_VER) && !defined(_CPPUNWIND))
416-
# define OPENTELEMETRY_HAVE_EXCEPTIONS 1
417-
# endif
418-
#endif
419-
#ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
420-
# define OPENTELEMETRY_HAVE_EXCEPTIONS 0
421-
#endif
404+
// #ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
405+
// # if defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__) < 306
406+
// // Clang < 3.6
407+
// // http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro
408+
// # if defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
409+
// # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
410+
// # endif // defined(__EXCEPTIONS) && OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
411+
// # elif OPENTELEMETRY_HAVE_FEATURE(cxx_exceptions)
412+
// # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
413+
// // Handle remaining special cases and default to exceptions being supported.
414+
// # elif !(defined(__GNUC__) && !defined(__EXCEPTIONS) && !defined(__cpp_exceptions)) && \
415+
// !(defined(_MSC_VER) && !defined(_CPPUNWIND))
416+
// # define OPENTELEMETRY_HAVE_EXCEPTIONS 1
417+
// # endif
418+
// #endif
419+
// #ifndef OPENTELEMETRY_HAVE_EXCEPTIONS
420+
// # define OPENTELEMETRY_HAVE_EXCEPTIONS 0
421+
// #endif
422422

423423
/*
424424
OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND indicates that a resource owned by a function
@@ -436,93 +436,95 @@ point.
436436
See also the upstream documentation:
437437
https://clang.llvm.org/docs/AttributeReference.html#lifetimebound
438438
*/
439-
#ifndef OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
440-
# if OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(clang::lifetimebound)
441-
# define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND [[clang::lifetimebound]]
442-
# elif OPENTELEMETRY_HAVE_ATTRIBUTE(lifetimebound)
443-
# define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND __attribute__((lifetimebound))
444-
# else
445-
# define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
446-
# endif
447-
#endif
439+
// #ifndef OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
440+
// # if OPENTELEMETRY_HAVE_CPP_ATTRIBUTE(clang::lifetimebound)
441+
// # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND [[clang::lifetimebound]]
442+
// # elif OPENTELEMETRY_HAVE_ATTRIBUTE(lifetimebound)
443+
// # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND __attribute__((lifetimebound))
444+
// # else
445+
// # define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
446+
// # endif
447+
// #endif
448+
449+
#define OPENTELEMETRY_ATTRIBUTE_LIFETIME_BOUND
448450

449451
// OPENTELEMETRY_HAVE_MEMORY_SANITIZER
450452
//
451453
// MemorySanitizer (MSan) is a detector of uninitialized reads. It consists of
452454
// a compiler instrumentation module and a run-time library.
453-
#ifndef OPENTELEMETRY_HAVE_MEMORY_SANITIZER
454-
# if !defined(__native_client__) && OPENTELEMETRY_HAVE_FEATURE(memory_sanitizer)
455-
# define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 1
456-
# else
457-
# define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 0
458-
# endif
459-
#endif
460-
461-
#if OPENTELEMETRY_HAVE_MEMORY_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_memory)
462-
# define OPENTELEMETRY_SANITIZER_NO_MEMORY \
463-
__attribute__((no_sanitize_memory)) // __attribute__((no_sanitize("memory")))
464-
#else
465-
# define OPENTELEMETRY_SANITIZER_NO_MEMORY
466-
#endif
455+
// #ifndef OPENTELEMETRY_HAVE_MEMORY_SANITIZER
456+
// # if !defined(__native_client__) && OPENTELEMETRY_HAVE_FEATURE(memory_sanitizer)
457+
// # define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 1
458+
// # else
459+
// # define OPENTELEMETRY_HAVE_MEMORY_SANITIZER 0
460+
// # endif
461+
// #endif
462+
463+
// #if OPENTELEMETRY_HAVE_MEMORY_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_memory)
464+
// # define OPENTELEMETRY_SANITIZER_NO_MEMORY \
465+
// __attribute__((no_sanitize_memory)) // __attribute__((no_sanitize("memory")))
466+
// #else
467+
// # define OPENTELEMETRY_SANITIZER_NO_MEMORY
468+
// #endif
467469

468470
// OPENTELEMETRY_HAVE_THREAD_SANITIZER
469471
//
470472
// ThreadSanitizer (TSan) is a fast data race detector.
471-
#ifndef OPENTELEMETRY_HAVE_THREAD_SANITIZER
472-
# if defined(__SANITIZE_THREAD__)
473-
# define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
474-
# elif OPENTELEMETRY_HAVE_FEATURE(thread_sanitizer)
475-
# define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
476-
# else
477-
# define OPENTELEMETRY_HAVE_THREAD_SANITIZER 0
478-
# endif
479-
#endif
480-
481-
#if OPENTELEMETRY_HAVE_THREAD_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_thread)
482-
# define OPENTELEMETRY_SANITIZER_NO_THREAD \
483-
__attribute__((no_sanitize_thread)) // __attribute__((no_sanitize("thread")))
484-
#else
485-
# define OPENTELEMETRY_SANITIZER_NO_THREAD
486-
#endif
473+
// #ifndef OPENTELEMETRY_HAVE_THREAD_SANITIZER
474+
// # if defined(__SANITIZE_THREAD__)
475+
// # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
476+
// # elif OPENTELEMETRY_HAVE_FEATURE(thread_sanitizer)
477+
// # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 1
478+
// # else
479+
// # define OPENTELEMETRY_HAVE_THREAD_SANITIZER 0
480+
// # endif
481+
// #endif
482+
483+
// #if OPENTELEMETRY_HAVE_THREAD_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_thread)
484+
// # define OPENTELEMETRY_SANITIZER_NO_THREAD \
485+
// __attribute__((no_sanitize_thread)) // __attribute__((no_sanitize("thread")))
486+
// #else
487+
// # define OPENTELEMETRY_SANITIZER_NO_THREAD
488+
// #endif
487489

488490
// OPENTELEMETRY_HAVE_ADDRESS_SANITIZER
489491
//
490492
// AddressSanitizer (ASan) is a fast memory error detector.
491-
#ifndef OPENTELEMETRY_HAVE_ADDRESS_SANITIZER
492-
# if defined(__SANITIZE_ADDRESS__)
493-
# define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
494-
# elif OPENTELEMETRY_HAVE_FEATURE(address_sanitizer)
495-
# define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
496-
# else
497-
# define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 0
498-
# endif
499-
#endif
493+
// #ifndef OPENTELEMETRY_HAVE_ADDRESS_SANITIZER
494+
// # if defined(__SANITIZE_ADDRESS__)
495+
// # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
496+
// # elif OPENTELEMETRY_HAVE_FEATURE(address_sanitizer)
497+
// # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 1
498+
// # else
499+
// # define OPENTELEMETRY_HAVE_ADDRESS_SANITIZER 0
500+
// # endif
501+
// #endif
500502

501503
// OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER
502504
//
503505
// Hardware-Assisted AddressSanitizer (or HWASAN) is even faster than asan
504506
// memory error detector which can use CPU features like ARM TBI, Intel LAM or
505507
// AMD UAI.
506-
#ifndef OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER
507-
# if defined(__SANITIZE_HWADDRESS__)
508-
# define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
509-
# elif OPENTELEMETRY_HAVE_FEATURE(hwaddress_sanitizer)
510-
# define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
511-
# else
512-
# define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 0
513-
# endif
514-
#endif
515-
516-
#if OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_address)
517-
# define OPENTELEMETRY_SANITIZER_NO_ADDRESS \
518-
__attribute__((no_sanitize_address)) // __attribute__((no_sanitize("address")))
519-
#elif OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && defined(_MSC_VER) && _MSC_VER >= 1928
520-
# define OPENTELEMETRY_SANITIZER_NO_ADDRESS __declspec(no_sanitize_address)
521-
#elif OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize)
522-
# define OPENTELEMETRY_SANITIZER_NO_ADDRESS __attribute__((no_sanitize("hwaddress")))
523-
#else
524-
# define OPENTELEMETRY_SANITIZER_NO_ADDRESS
525-
#endif
508+
// #ifndef OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER
509+
// # if defined(__SANITIZE_HWADDRESS__)
510+
// # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
511+
// # elif OPENTELEMETRY_HAVE_FEATURE(hwaddress_sanitizer)
512+
// # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 1
513+
// # else
514+
// # define OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER 0
515+
// # endif
516+
// #endif
517+
518+
// #if OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize_address)
519+
// # define OPENTELEMETRY_SANITIZER_NO_ADDRESS \
520+
// __attribute__((no_sanitize_address)) // __attribute__((no_sanitize("address")))
521+
// #elif OPENTELEMETRY_HAVE_ADDRESS_SANITIZER && defined(_MSC_VER) && _MSC_VER >= 1928
522+
// # define OPENTELEMETRY_SANITIZER_NO_ADDRESS __declspec(no_sanitize_address)
523+
// #elif OPENTELEMETRY_HAVE_HWADDRESS_SANITIZER && OPENTELEMETRY_HAVE_ATTRIBUTE(no_sanitize)
524+
// # define OPENTELEMETRY_SANITIZER_NO_ADDRESS __attribute__((no_sanitize("hwaddress")))
525+
// #else
526+
// # define OPENTELEMETRY_SANITIZER_NO_ADDRESS
527+
// #endif
526528

527529
// what foloows are overrides specific to github.com/malkia/opentelemetry-cpp's fork
528530
// where we force certain flags to be set, such that users of the library do not have to set them (through -Dxxx=yyy, etc.)
@@ -544,10 +546,10 @@ point.
544546
#endif
545547
#define OPENTELEMETRY_OPTION_USE_STD_SPAN 0 // Use the nostd version, std::span is in C++2020
546548

547-
#ifdef OPENTELEMETRY_HAVE_EXCEPTIONS
548-
#undef OPENTELEMETRY_HAVE_EXCEPTIONS
549-
#endif
550-
#define OPENTELEMETRY_HAVE_EXCEPTIONS 1
549+
// #ifdef OPENTELEMETRY_HAVE_EXCEPTIONS
550+
// #undef OPENTELEMETRY_HAVE_EXCEPTIONS
551+
// #endif
552+
// #define OPENTELEMETRY_HAVE_EXCEPTIONS 1
551553

552554
#ifdef OPENTELEMETRY_ABI_VERSION_NO
553555
#undef OPENTELEMETRY_ABI_VERSION_NO
@@ -619,6 +621,8 @@ point.
619621
# define OPENTELEMETRY_API_SINGLETON OPENTELEMETRY_EXPORT
620622
#endif // if OPENTELEMETRY_DLL != 0
621623

624+
// TODO: https://chatgpt.com/share/6840802f-2388-800a-a68a-928e76535c86
625+
622626
// this check only works for static library build
623627
#if defined(_MSC_VER)
624628
#define OPENTELEMETRY_STRX(x) #x
@@ -628,7 +632,6 @@ point.
628632
"+stl:" OPENTELEMETRY_STR(OPENTELEMETRY_STL_VERSION) \
629633
"+rtti:" OPENTELEMETRY_STR(OPENTELEMETRY_RTTI_ENABLED) \
630634
"+std_span:" OPENTELEMETRY_STR(OPENTELEMETRY_OPTION_USE_STD_SPAN) \
631-
"+have_excpts:" OPENTELEMETRY_STR(OPENTELEMETRY_HAVE_EXCEPTIONS) \
632635
"+abi:" OPENTELEMETRY_STR(OPENTELEMETRY_ABI_VERSION_NO) \
633636
"+exemplar:" OPENTELEMETRY_STR(ENABLE_METRICS_EXEMPLAR_PREVIEW) \
634637
"+async:" OPENTELEMETRY_STR(ENABLE_ASYNC_EXPORT) \
@@ -638,6 +641,9 @@ point.
638641
"+thrd_instr:" OPENTELEMETRY_STR(ENABLE_THREAD_INSTRUMENTATION_PREVIEW) \
639642
"+curl_log:" OPENTELEMETRY_STR(ENABLE_CURL_LOGGING) \
640643
)
644+
645+
// "+have_excpts:" OPENTELEMETRY_STR(OPENTELEMETRY_HAVE_EXCEPTIONS)
646+
641647
#undef OPENTELEMETRY_DLL_STRX
642648
#undef OPENTELEMETRY_DLL_STR
643649
#endif

0 commit comments

Comments
 (0)