diff options
| author | Richard Trieu <rtrieu@google.com> | 2017-11-01 03:57:27 +0000 |
|---|---|---|
| committer | Richard Trieu <rtrieu@google.com> | 2017-11-01 03:57:27 +0000 |
| commit | 7f932dd063c54c6dab67d2e4319b60a95c10a22a (patch) | |
| tree | 8067821340ac23a1d0450db347ee0de750ebf2fa | |
| parent | c51aac675d5439135830c34e03a09ec3f225a227 (diff) | |
| download | bcm5719-llvm-7f932dd063c54c6dab67d2e4319b60a95c10a22a.tar.gz bcm5719-llvm-7f932dd063c54c6dab67d2e4319b60a95c10a22a.zip | |
Change assertion to quick exit from checking function.
Remove the assertion that could be triggered by invalid code. Replace it with
an early exit from the checking function.
llvm-svn: 317073
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 5 | ||||
| -rw-r--r-- | clang/test/SemaCXX/missing-members.cpp | 14 |
2 files changed, 16 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index fa9e9f32181..a5ccce61542 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2555,9 +2555,8 @@ Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, /*DetectVirtual=*/false); bool DerivationOkay = IsDerivedFrom(Loc, Derived, Base, Paths); - assert(DerivationOkay && - "Can only be used with a derived-to-base conversion"); - (void)DerivationOkay; + if (!DerivationOkay) + return true; const CXXBasePath *Path = nullptr; if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) diff --git a/clang/test/SemaCXX/missing-members.cpp b/clang/test/SemaCXX/missing-members.cpp index 96bed074db8..61dddcbe502 100644 --- a/clang/test/SemaCXX/missing-members.cpp +++ b/clang/test/SemaCXX/missing-members.cpp @@ -37,3 +37,17 @@ struct S : A::B::C { using A::B::C::f; // expected-error {{no member named 'f' in 'A::B::C'}} }; + +struct S1 {}; + +struct S2 : S1 {}; + +struct S3 : S2 { + void run(); +}; + +struct S4: S3 {}; + +void test(S4 *ptr) { + ptr->S1::run(); // expected-error {{no member named 'run' in 'S1'}} +} |

