blob: 51a2fdb4d4729a0369dfac177dda32cc60e27d9e [file] [log] [blame] [edit]
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O0 %s -S -emit-llvm -o - %loadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O1 %s -S -emit-llvm -o - %loadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O2 %s -S -emit-llvm -o - %loadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O3 %s -S -emit-llvm -o - %loadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O0 %s -S -emit-llvm -o - %newLoadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O1 %s -S -emit-llvm -o - %newLoadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O2 %s -S -emit-llvm -o - %newLoadClangEnzyme -Xclang -verify; fi
// RUN: if [ %llvmver -ge 17 ]; then %clang++ -std=c++17 -O3 %s -S -emit-llvm -o - %newLoadClangEnzyme -Xclang -verify; fi
#include "../test_utils.h"
#include <enzyme/enzyme>
float f(float x) { return x * x; }
float g(const float& x) { return x * x; }
float h(const float* x) { return *x * *x; }
int test_failures() {
const float x = 10;
{
/*
* This will not work in the C++ interface because it is also not allowed
* with the C-style __enzyme_autodiff call
*/
const float dfdx = enzyme::get<0>(
enzyme::get<0>(
enzyme::autodiff<enzyme::Reverse>( // expected-error@/enzymeroot/enzyme/utils:259 {{no member named 'value' in 'enzyme::Active<const float &>'}} expected-note {{}}
g, enzyme::Active<const float&>{ x } // expected-error@/enzymeroot/enzyme/utils:48 {{static assertion failed due to requirement '!std::is_reference_v<const float &>': Reference/pointer active arguments don't make sense for AD!}} expected-note {{}} expected-note@/enzymeroot/enzyme/utils:535 {{}}
)
)
);
}
{
/*
* Error: non-reference duplicated arguments don't make sense in reverse
* mode
*/
float dfdx = 0;
enzyme::autodiff<enzyme::Reverse>( // expected-error@/enzymeroot/enzyme/utils:527 {{static assertion failed due to requirement 'detail::verify_dup_args<enzyme::ReverseMode<false>, enzyme::Duplicated<float>>::value': Non-reference/pointer Duplicated/DuplicatedNoNeed args don't make sense for Reverse mode AD}} expected-note {{}}
f, enzyme::Duplicated<float>{ x, dfdx }
);
}
return 0;
}