Skip to content
  • Richard Smith's avatar
    PR23135: Don't instantiate constexpr functions referenced in unevaluated operands where possible. · 8ea4b564
    Richard Smith authored
    This implements something like the current direction of DR1581: we use a narrow
    syntactic check to determine the set of places where a constant expression
    could be evaluated, and only instantiate a constexpr function or variable if
    it's referenced in one of those contexts, or is odr-used.
    
    It's not yet clear whether this is the right set of syntactic locations; we
    currently consider all contexts within templates that would result in odr-uses
    after instantiation, and contexts within list-initialization (narrowing
    conversions take another victim...), as requiring instantiation. We could in
    principle restrict the former cases more (only const integral / reference
    variable initializers, and contexts in which a constant expression is required,
    perhaps). However, this is sufficient to allow us to accept libstdc++ code,
    which relies on GCC's behavior (which appears to be somewhat similar to this
    approach).
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291318 91177308-0d34-0410-b5e6-96231b3b80d8
    8ea4b564