[llvm-dev] Possible soundness issue with available_externally (split from "RFC: Add guard intrinsics")
    Sanjoy Das via llvm-dev 
    llvm-dev at lists.llvm.org
       
    Fri Feb 26 20:18:36 PST 2016
    
    
  
On Fri, Feb 26, 2016 at 7:59 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> I'm *extremely* uncomfortable fixing this at all unless it can be done
> without causing performance regressions. The underlying basic use case
> (linking together code compiled with different optimization levels), is
> certainly something I'd like to work properly, but is definitely a far lower
> priority than optimized code quality and size.
You don't need different optimization levels to trigger this.  The
original example could have been
  void foo() available_externally {
    %t0 = load atomic %ptr
    %t1 = call i32 @bar()
    if (%t0 != %t1) print("X");
  }
  void main() {
    foo();
    print("Y");
  }
with @bar (just atomic_loads from %ptr and returns the value loaded)
being a declaration in one TU and a definition in another TU.  The TU
with the defn. could then inline @bar into @foo() while the one with
the decl. would not; leading to the same problem.
-- Sanjoy
    
    
More information about the llvm-dev
mailing list