================
@@ -79,3 +79,16 @@ float V7 = []() -> float {
   0x0.000001p0F);
 }();
 // CHECK: @V7 = {{.*}} float 1.000000e+00
+
+template<float V> struct L {
+  constexpr L() : value(V) {}
+  float value;
+};
+
+#pragma STDC FENV_ROUND FE_DOWNWARD
----------------
erichkeane wrote:

>Does this test address your concern: 
>https://github.com/spavloff/llvm-project/blob/aeb6074444513587924106081213335f73ba6eb0/clang/test/AST/ast-dump-fpfeatures.cpp#L124-L143
> ?

That one does not.  I'm more looking for:
```
template<typename T, T f> void foo(){}
#pragma STDC FENV_ROUND FE_DOWNWARD
foo<float, 0.1f>();
#pragma STDC FENV_ROUND FE_UPWARD
foo<float, 0.1f>();
```

Then confirming that there are two separate instantiations of `foo`.

>>All instantiations of a function template use the rounding mode specified in 
>>the template definition. Otherwise we would have bad things like two 
>>instantiations in different translation units that use different rounding 
>>modes. 

Right, that was very much my concern, the ODR implications of that are scary.  
So jsut the 1 test above, and I think _I_ am good about this, though having 
@jcranmer-intel and/or @zahiraam review would also be appreciated.

https://github.com/llvm/llvm-project/pull/90877
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to