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

Krzysztof Parzyszek via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 4 14:51:18 PDT 2017


I think that asserts are assumed to be controlled by NDEBUG. Does the 
other project enable them in some other way?

-Krzysztof

On 10/4/2017 4:41 PM, Quentin Colombet via llvm-dev wrote:
> 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
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> 

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation


More information about the llvm-dev mailing list