[llvm-dev] Question: Should we consider valid a variable defined #ifndef NDEBUG scope and used in assert?

Quentin Colombet via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 4 14:41:26 PDT 2017


Hi,

While audit our code, we found out a strange pattern in one of the LLVM headers and we were wondering if that was expected or if it should be fixed.

Namely the problem looks like this:
#ifndef NDEBUG
  // Define some variable.
#endif

assert(/*use this variable, i.e., outside of the ifndef NDEBUG scope*/);

This happens in include/llvm/IR/ValueHandle.h for the variable Poisoned line 494

This works because when we build LLVM with assert we explicitly disable NDEBUG:
if( LLVM_ENABLE_ASSERTIONS )
  […]
  # On non-Debug builds cmake automatically defines NDEBUG, so we
  # explicitly undefine it:
  if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
    add_definitions( -UNDEBUG )

If we use this header in a different project and thus, with potentially different rules for macro definitions, the compiler complains with
error:   use of undeclared identifier ‘Poisoned'

I think the right thing to do is to fix the code to work without the special way of setting the macros, but I’d like people opinions first.

Thanks,
-Quentin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171004/a7edc1e2/attachment.html>


More information about the llvm-dev mailing list