More precise type checking in DeclareFunInst for LLVM and C++ backends (even if too restrictive for LLVM backend, but at least it avoids crashes or assert..)
https://github.com/grame-cncm/faust/commit/7adc199d0c399cb72448a9160f90fe6882de78c9 Stéphane > Le 26 mars 2018 à 22:41, Yann Orlarey <orla...@grame.fr> a écrit : > > We can overload functions provided that the argument's signatures are > different. Otherwise, the generated C++ code won't compile: > > error: functions that differ only in their return type cannot be overloaded > > But obviously, we should report an error ("foreign functions that differ only > in their return type cannot be overloaded" ?) instead of triggering an > exception when that's not the case. > > ------------------------- > > Yann Orlarey > Directeur scientifique > www.grame.fr > > > > 2018-03-26 11:16 GMT-07:00 Stéphane Letz <l...@grame.fr>: > > > Le 26 mars 2018 à 14:48, Oleg Nesterov <o...@redhat.com> a écrit : > > > > On 03/24, Yann Orlarey wrote: > >> > >> Hi, > >> > >> The problem has been fixed in version 2.5.26. The compiler now reports > >> an error instead of an exception. > > > > and the fix is much better than I tried to suggest, thanks. > > > > OK, let me report another minor/trivial problem. Again, I'm not sure I > > understand > > this code correctly, but I think that InstructionsCompiler::generateFFun() > > should > > check 'fun_type' before it calls genDeclareFunInst(). This code > > > > process = ffunction(int func(), "",""), > > ffunction(float func(), "",""); > > > > obviously crashes faust (triggers assert in > > DeclareFunInst::DeclareFunInst()). > > > > OTOH, faust happily translates this code > > > > process = ffunction(int func(), "",""), > > ffunction(int func(float), "",""); > > > > into > > > > output0[i] = FAUSTFLOAT(int(func())); > > output1[i] = FAUSTFLOAT(int(func(float(float(input0[i]))))); > > > > probably because nerateFFun() generates the new args_types/args_value every > > time > > without any check. This is not that bad, but perhaps not right anyway. > > > > Oleg. > > > The DeclareFunInst causes this assert if functions with the same name but > different prototypes are used. This is probably not correct !? > > Yann are we supposed to be able to use several « foreign functions with the > same name but different prototypes » ? Or at least coming from different > header files? If not then I guess this could/should be checked before the FIR > generation step and the use of DeclareFunInst. > > Stéphane > > > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Faudiostream-users mailing list Faudiostream-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/faudiostream-users