================
@@ -1086,15 +1086,35 @@ static bool parseDialectArgs(CompilerInvocation &res,
llvm::opt::ArgList &args,
}
// -fdefault* family
- if (args.hasArg(clang::options::OPT_fdefault_real_8)) {
- res.getDefaultKinds().set_defaultRealKind(8);
- res.getDefaultKinds().set_doublePrecisionKind(16);
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::options::OPT_fdefault_real_8,
+ clang::options::OPT_fdefault_real_4)) {
+ const llvm::opt::Option &opt = arg->getOption();
+ if (opt.matches(clang::options::OPT_fdefault_real_8)) {
+ res.getDefaultKinds().set_defaultRealKind(8);
+ res.getDefaultKinds().set_doublePrecisionKind(16);
----------------
tarunprabhu wrote:
There PR does not change the behavior of `-fdefault-real-8`, so `flang` will
continue to behave as it would have before.
```
program test
implicit none
double precision :: n
write(*,*) acos(n)
end program test
```
If I compile the code above on a machine without support for `real(16)`, I get
this:
```
flang -fdefault-real-8 -o /tmp/a.out -O2 /tmp/test.f90 && /tmp/a.out
/usr/bin/ld: /tmp/double-0c6305.o: in function `_QQmain':
FIRModule:(.text+0x1f): undefined reference to `_FortranAAcosF128'
/usr/bin/ld: /tmp/double-0c6305.o: in function `main':
FIRModule:(.text+0x96): undefined reference to `_FortranAAcosF128'
```
It may be a better user experience to emit a warning - or even an error -
`-fdefault-real-8` is used on a target that does not support `real(16)`. IMO,
that is an unrelated change that should be deferred to a different PR.
https://github.com/llvm/llvm-project/pull/172323
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits