[PATCH] D109252: Add extra check for llvm::Any::TypeId visibility

serge via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 6 22:39:28 PDT 2021


serge-sans-paille updated this revision to Diff 370989.
serge-sans-paille added a comment.

Use FileCheck and llvm-nm for the test.
Catch more potential issues.
Be more explicit about the issue in the various comments .


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109252/new/

https://reviews.llvm.org/D109252

Files:
  llvm/test/CMakeLists.txt
  llvm/tools/llvm-shlib/CMakeLists.txt
  llvm/tools/llvm-shlib/typeid.pattern


Index: llvm/tools/llvm-shlib/typeid.pattern
===================================================================
--- /dev/null
+++ llvm/tools/llvm-shlib/typeid.pattern
@@ -0,0 +1,9 @@
+# Make sure there's no llvm::Any::TypeId symbol with implicit weak visibility.
+# That would cause non-unicity of the adresses used as unique identifier for
+# each type.
+# This happens when llvm::Any::TypeId is parametrized by a type with
+# hidden visibility.
+
+# CHECK-NOT: b llvm::Any::TypeId
+# CHECK-NOT: r llvm::Any::TypeId
+# CHECK: V llvm::Any::TypeId
Index: llvm/tools/llvm-shlib/CMakeLists.txt
===================================================================
--- llvm/tools/llvm-shlib/CMakeLists.txt
+++ llvm/tools/llvm-shlib/CMakeLists.txt
@@ -72,6 +72,21 @@
   if(TARGET libLLVMExports)
     add_dependencies(LLVM libLLVMExports)
   endif()
+
+  set(LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
+  set(LIB_NAME ${LIB_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}LLVM)
+
+  if(UNIX)
+      # This checks unicity of the adress of llvm::Any::TypeId symbols used as unique type identifiers.
+      # See ${CMAKE_CURRENT_SOURCE_DIR}/typeid.pattern for more details.
+      add_custom_target(
+        check-typeid-visibility
+        COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/llvm-nm -C ${LIB_NAME}-${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}${CMAKE_SHARED_LIBRARY_SUFFIX} | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/FileCheck ${CMAKE_CURRENT_SOURCE_DIR}/typeid.pattern
+        DEPENDS LLVM llvm-nm FileCheck
+        WORKING_DIRECTORY ${LIB_DIR}
+        COMMENT "Checking llvm::Any::TypeId visibility")
+  endif()
+
 endif()
 
 if(LLVM_BUILD_LLVM_C_DYLIB AND NOT MSVC)
@@ -88,8 +103,6 @@
 
   set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_BINARY_DIR}/libllvm-c.exports)
 
-  set(LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
-  set(LIB_NAME ${LIB_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}LLVM)
   set(LIB_PATH ${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
   set(LIB_EXPORTS_PATH ${LIB_NAME}.exports)
   list(APPEND LLVM_DYLIB_REQUIRED_EXPORTS ${LIB_EXPORTS_PATH})
Index: llvm/test/CMakeLists.txt
===================================================================
--- llvm/test/CMakeLists.txt
+++ llvm/test/CMakeLists.txt
@@ -221,6 +221,11 @@
   )
 set_target_properties(check-llvm PROPERTIES FOLDER "Tests")
 
+if(TARGET check-typeid-visibility)
+  add_dependencies(check-llvm check-typeid-visibility)
+endif()
+
+
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
   ${exclude_from_check_all}
   DEPENDS ${LLVM_TEST_DEPENDS}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109252.370989.patch
Type: text/x-patch
Size: 2553 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210907/3991f1a5/attachment.bin>


More information about the llvm-commits mailing list