diff options
author | Eli Friedman <efriedma@codeaurora.org> | 2019-01-22 00:11:17 +0000 |
---|---|---|
committer | Eli Friedman <efriedma@codeaurora.org> | 2019-01-22 00:11:17 +0000 |
commit | 3f82f9e127268d28f2830d72bf4f402e31a0a477 (patch) | |
tree | 5c63308f94c0e3a25e2f7eaf641d141fc1dc317d /clang/test/CodeGenCXX/predefined-expr-cxx14.cpp | |
parent | 6e69db5a2dfe8cf4658654714c506422e31a19a2 (diff) | |
download | bcm5719-llvm-3f82f9e127268d28f2830d72bf4f402e31a0a477.tar.gz bcm5719-llvm-3f82f9e127268d28f2830d72bf4f402e31a0a477.zip |
[CodeGen] Always use string computed in Sema for PredefinedExpr
We can't use any other string, anyway, because its type wouldn't
match the type of the PredefinedExpr.
With this change, we don't compute a "nice" name for the __func__ global
when it's used in the initializer for a constant. This doesn't seem like
a great loss, and I'm not sure how to fix it without either storing more
information in the AST, or somehow threading through the information
from ExprConstant.cpp.
This could break some situations involving BlockDecl; currently,
CodeGenFunction::EmitPredefinedLValue has some logic to intentionally
emit a string different from what Sema computed. This code skips that
logic... but that logic can't work correctly in general anyway. (For
example, sizeof(__func__) returns the wrong result.) Hopefully this
doesn't affect practical code.
Fixes https://bugs.llvm.org/show_bug.cgi?id=40313 .
Differential Revision: https://reviews.llvm.org/D56821
llvm-svn: 351766
Diffstat (limited to 'clang/test/CodeGenCXX/predefined-expr-cxx14.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/predefined-expr-cxx14.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/predefined-expr-cxx14.cpp b/clang/test/CodeGenCXX/predefined-expr-cxx14.cpp index dd531e3112b..ec7c3db7bd4 100644 --- a/clang/test/CodeGenCXX/predefined-expr-cxx14.cpp +++ b/clang/test/CodeGenCXX/predefined-expr-cxx14.cpp @@ -20,6 +20,8 @@ // CHECK-DAG: @__func__.___ZN16ClassBlockConstrD2Ev_block_invoke = private unnamed_addr constant [31 x i8] c"~ClassBlockConstr_block_invoke\00" // CHECK-DAG: @__func__.___ZN16ClassBlockConstrC2Ev_block_invoke = private unnamed_addr constant [30 x i8] c"ClassBlockConstr_block_invoke\00" +// CHECK-DAG: private unnamed_addr constant [32 x i8] c"const char *ConstexprPrettyFn()\00" + int printf(const char * _Format, ...); class ClassInTopLevelNamespace { @@ -83,6 +85,11 @@ public: const char *getFunc() const { return Func; } }; +constexpr const char* ConstexprPrettyFn() { + return __PRETTY_FUNCTION__; +} +const char* ConstexprPrettyVar = ConstexprPrettyFn(); + int main() { int a; |